Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# string.CompareOrdinal的奇怪行为_C#_.net - Fatal编程技术网

C# string.CompareOrdinal的奇怪行为

C# string.CompareOrdinal的奇怪行为,c#,.net,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));

当我编译和运行这段代码时,有时它会打印出来

        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
(真正奇怪的是,两个空子字符串必须相等)


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

可以在有关字符串的MSDN“备注”中找到一个可能的答案。CompareOrdinal方法:

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


是否有可能传递的是空字符串?

关于比特率,我没有完全正确。其中一个应用程序有一个“32位首选”选项集,实际上是在32位模式下运行的。这就是原因:32位应用程序打印所有零,64位应用程序打印“-1-10”。然而,这只是答案的一部分。我仍然需要解释为什么会发生这种情况。欢迎提供更好的答案

UPD我已经向微软报告了


UPD2.NET 4.6.1-问题仍然存在;Microsoft已悄无声息地删除了我的Connect bugreport

您正在抱怨空字符串行为不端,但发布了不使用空字符串的代码。发布真正的代码是必要的。我不明白为什么有时候它会打印一个东西,有时候又打印另一个,但您指定了一个0长度,所以它们总是相等的。@Hans Passant,我说的是子字符串。所有代码都在上面。@TaW,这个例子显示了完全相同的错误输出。如果是这样的话,您就发现了一个bug。创建一个最小的项目来复制并将其传递给MS。对于您的应用程序,请使用变通方法-检查长度!=0应该很简单。问题似乎与Console.WriteLine有关,它对Int32和Int64都有重载。在x64上,编译器似乎选择了后一种重载—即使String.CompareOrdinal返回Int32(如文档所示)。看见例如(寻找IntPtr)。啊,我的错误。我以为您正在展示示例代码,但可能在实际实现中使用了变量。
-1
-1
0