StringComparer.CurrentCulture 不区分大小写

StringComparer.CurrentCulture Case-Insensitive

提问人:RoadieRich 提问时间:7/11/2023 最后编辑:RoadieRich 更新时间:7/11/2023 访问量:42

问:

两者似乎都不区分大小写。有没有办法控制它?正如预期的那样,StringComparer.Ordinal 区分大小写。StringComparer.CurrentCultureStringComparer.InvariantCulture

注意:所有三个比较器也都有一个版本,我没有使用。IgnoreCase

法典:

var comparers = new List<StringComparer>{StringComparer.CurrentCulture, StringComparer.InvariantCulture, StringComparer.Ordinal};

foreach (var c in comparers)
{
    Console.Out.WriteLine($"A B {c.Compare("A", "B")}");
    Console.Out.WriteLine($"A b {c.Compare("A", "b")}");
    Console.Out.WriteLine($"a B {c.Compare("a", "B")}");
}

输出:

A B -1
A b -1
a B -1
A B -1
A b -1
a B -1
A B -1
A b -33
a B 31

我希望第 2 行和第 3 行以及第 5 行和第 6 行会有所不同。

C# 文化信息 net-7.0

评论

2赞 GSerg 7/11/2023
为什么你认为它们不区分大小写?试着比较“A”和“a”,你得到的是零吗?
1赞 Voo 7/11/2023
不区分大小写仅处理等效性检查。您想知道 unicode 排序规则,这本身就是一个非常有趣的话题。9.6 可能很有趣。似乎是排序顺序是 for 和 invariant culture。对于序数来说,这并不奇怪 - 这只是比较大写字母在小写字母之前的代码点。乍一看令人惊讶,但在考虑其他不属于大写/小写区别的字符时,我可以看到其中的逻辑。a,A,b,Ben-us
0赞 Voo 7/11/2023
我想没有不区分大小写的排序规则算法,因为考虑到 unicode 比较的所有复杂性,如果你尝试这样做,可能就不可能定义一个总顺序。如果没有这些属性,你就不能用它来实际排序任何东西,这将使它变得毫无用处。

答: 暂无答案