c# - 连字符后的字符影响 string.compare

标签 c# string-comparison

我希望“2-”和“22”总是以相同的方式进行比较,但更改第 3 个字符会更改排序顺序。

string.Compare("2-1","22-", StringComparison.CurrentCulture) //-1
string.Compare("2-2","22-", StringComparison.CurrentCulture) //1

这里到底发生了什么?

顺便说一下,我们的文化是 en-US。

最佳答案

根据 documentation :

Character sets include ignorable characters. The Compare(String, String, StringComparison) method does not consider such characters when it performs a culture-sensitive comparison. To recognize ignorable characters in your comparison, supply a value of StringComparison.Ordinal or OrdinalIgnoreCase for the comparisonType parameter.

在您的例子中,连字符是一个可忽略的字符。在这种情况下,这意味着不考虑中间的连字符。这意味着它实际上将 212222- 进行比较,后者将评估为 -1 1 分别。

关于c# - 连字符后的字符影响 string.compare,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44675770/

相关文章:

c++ - 为 const char* 定义 std::begin 是否合法?

c# - .NET 字符串 IndexOf 意外结果

c# - 在 C# 中使用带有正则表达式的 Directory.GetFiles?

c# - 对如何在 LINQ 中进行 Group by 非常困惑,对 HAVING 更困惑

arrays - 数组和已知子序列差异的有效算法?

python - 将hexdigest()的结果与字符串进行比较

JavaScript - 比较字符串并从其中一个字符串中删除第一个字符,直到它们相等

c# - 使用 Twitter Bootstrap、C#、asp.net 和 javascript 上传文件

c# - 抽象方法使用与常规方法

c - 登录脚本未按预期比较字符串输入