string.CompareOrdinal的奇怪行为

时间:2014-05-10 23:04:57

标签: c# .net

        Console.WriteLine(string.CompareOrdinal("aaaaa", 3, "bbbb", 1, 0));
        Console.WriteLine(string.CompareOrdinal("aaaaa", 1, "bbbb", 3, 0));
        Console.WriteLine(string.CompareOrdinal("aaaaa", 1, "bbbb", 2, 0));

当我编译并运行此代码时,有时会打印

0
0
0

(预期的) 有时候

-1
-1
0

(真正奇怪的是,因为2个空子串必须相等)

第二种输出发生在我的一个程序中,我不知道为什么。我正在使用VS2013为.NET 4.5.1 AnyCpu编译它。有没有人遇到类似的错误?任何想法,为什么会发生?

2 个答案:

答案 0 :(得分:-1)

可以在关于String.CompareOrdinal方法的MSDN“备注”中找到一个可能的答案:

http://msdn.microsoft.com/en-us/library/es986b3k(v=vs.110).aspx

  

...因为CompareOrdinal(String,String)是一个静态方法,strA和strB   可以为null。如果两个值都为null,则该方法返回0(零),即   表示strA和strB相等。   如果只有一个值为null,则该方法将非null值视为   更大

你是否有可能传入一个空字符串?

答案 1 :(得分:-4)

关于位数,我并不完全正确。其中一个应用程序有一个" 32位首选"选项集,实际以32位模式运行。因此,这就是原因:32位应用程序打印全零,64位应用程序打印" -1 -1 0"。但是,这只是答案的一部分。我仍然需要解释为什么会这样。欢迎提供更好的答案。

UPD我已将此报告给Microsoft https://connect.microsoft.com/VisualStudio/feedback/details/871055/incorrect-behavior-of-an-application-in-64-bit-mode

UPD2 .NET 4.6.1 - 问题仍然存在; Microsoft已默默删除了我的Connect bugreport