相关疑难解决方法(0)

为什么默认字符串比较器无法保持传递一致性?

我知道之前已经注意到这个问题,或多或少简洁,但我仍然创建这个新线程,因为我在编写单元测试时再次遇到了这个问题.

默认的字符串比较(即文化相关的区分大小写的比较,我们得到有string.CompareTo(string),Comparer<string>.Default,StringComparer.CurrentCulture,string.Compare(string, string)等)违反及物当字符串包含连字符(或减号,我说的是普通的U + 002D字符).

这是一个简单的复制品:

static void Main()
{
  const string a = "fk-";
  const string b = "-fk";
  const string c = "Fk";

  Console.WriteLine(a.CompareTo(b));  // "-1"
  Console.WriteLine(b.CompareTo(c));  // "-1"
  Console.WriteLine(a.CompareTo(c));  // "1"

  var listX = new List<string> { a, b, c, };
  var listY = new List<string> { c, a, b, };
  var listZ = new List<string> { b, c, a, };
  listX.Sort();
  listY.Sort();
  listZ.Sort();
  Console.WriteLine(listX.SequenceEqual(listY));  // "False" …
Run Code Online (Sandbox Code Playgroud)

.net c# sorting string string-comparison

30
推荐指数
1
解决办法
1953
查看次数

使用字母和短划线排序字符串时出现意外行为

如果我有一些字符串列表包含所有数字和破折号,他们将按升序排序:

s = s.OrderBy(t => t).ToList();
Run Code Online (Sandbox Code Playgroud)

66-0616280-000
66-0616280-100
66-06162801000
66-06162801040

这是预期的.

但是,如果字符串包含字母,则排序有些出乎意料.例如,这里是相同的字符串列表,尾随A代替0,是的,它是排序的:

66-0616280-00A
66-0616280100A
66-0616280104A
66-0616280-10A

我原以为他们会这样排序:

66-0616280-00A
66-0616280-10A
66-0616280100A
66-0616280104A

当字符串包含字母时,为什么排序在字符串上的行为不同?

提前致谢.

c# sorting

14
推荐指数
2
解决办法
1481
查看次数

标签 统计

c# ×2

sorting ×2

.net ×1

string ×1

string-comparison ×1