c# - String.CompareTo 与大小写

标签 c# .net

示例代码说明:

    int res1 = "a".CompareTo("A");  // res1 = -1
    int res2 = "ab".CompareTo("A");  // res2 = 1

我在结尾处看到 res1 = -1res2 = 1,这有点出乎意料。 我认为 res1 会返回 1,因为在 ASCII 图表上,“A”(0x41) 在“a”(0x61) 之前。

此外,对于 res2,字符串的长度似乎有所不同,这似乎很奇怪。即,如果“a”出现在“A”之前(如 res1 = -1 所示),那么我会认为“a”withAnythingAfterIt 也会出现在“A”withAnythingAfterIt 之前。

有人能解释一下吗? 谢谢。

最佳答案

这是预期的行为。 String.CompareTo(string) 使用其排序顺序进行文化敏感比较。事实上,它调用 CultureInfo 来完成我们在源代码中看到的工作:

public int CompareTo(String strB) {
    if (strB==null) {
        return 1;
    }

    return CultureInfo.CurrentCulture.CompareInfo.Compare(this, strB, 0);
}

您当前的文化在排序顺序中将“A”放在“a”之后,因为它会是平局,但不是在“ab”之后,因为在大多数排序中“ab”显然在“a”或“A”之后我知道的命令。这只是打破平局机制的作用:当排序顺序相同时,使用序数值!

关于c# - String.CompareTo 与大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49663488/

相关文章:

c# - 我如何使用 3d 变换计算 2d 边界框

c# - 更新文本框内部文本而不刷新页面

c# - 按契约(Contract)进行静态检查设计

.net - 如何开始WPF开发?

c# - HTTP 请求 ' ' 中发现的 MAC 签名与任何计算出的签名不同。服务器使用以下字符串来签名 : 'PUT

c# - 如何解析 set-cookie header 中的名称-值对?

用于特定区域外匹配的 C# 正则表达式

.net - 在 Visual Studio 编辑器中检测事件

c# - 为了可测试性,向 ComboBox 添加功能的正确方法是什么?

javascript - 2016年如何在排除机器人和爬虫的情况下收集浏览量?