【发布时间】:2017-11-15 09:08:45
【问题描述】:
我需要将一些字符串比较从 vb 转换为 c#。 vb 代码使用 > 和
[TestMethod]
public void TestMethod2()
{
string originalCulture = CultureInfo.CurrentCulture.Name; // en-GB
var a = "d".CompareTo("t"); // returns -1
var b = "T".CompareTo("t"); // returns 1
Assert.IsTrue(a < 0, "Case 1");
Assert.IsTrue(b <= 0, "Case 2");
}
有人可以解释为什么 b 返回 1。我目前的理解是,如果它区分大小写,那么“T”应该在排序顺序中位于“t”之前,即 -1。如果不区分大小写,则相同,即 0
(仅供参考.Net Framework 4.5.2)
很多感谢
【问题讨论】:
-
能把VB代码也显示一下吗?
-
为什么你特别希望大写在小写之前? (诚然,如果你使用 ordinal 比较,它确实如此。)
-
来自msdn.microsoft.com/en-us/library/35f0x18w(v=vs.110).aspx "此方法使用当前区域性执行单词(区分大小写和区域性)比较"。然后建议阅读msdn.microsoft.com/en-us/library/84787k22(v=vs.110).aspx 以获取更多信息,其中指出“比较使用当前文化来获取特定于文化的信息,例如大小写规则”。所以它可能取决于你的默认文化是什么以及它的规则是什么。您可以使用此方法覆盖默认值 msdn.microsoft.com/en-us/library/e6883c06(v=vs.110).aspx
-
使用返回-16的
int a = string.Compare("d", "t", StringComparison.Ordinal)和返回-32的int b = string.Compare("T", "t", StringComparison.Ordinal);。如果您不指定StringComparison,则使用CurrentCulture。 -
是的,但是您进行的比较是一种文化比较。如果您要求进行序数比较(例如
string.Compare("T", "t", StringComparison.Ordinal)),那么会给出不同的结果。
标签: c#