Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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.Compare是否可以返回0?_C#_String_String Comparison - Fatal编程技术网

C# 对于真正不相等的字符串,string.Compare是否可以返回0?

C# 对于真正不相等的字符串,string.Compare是否可以返回0?,c#,string,string-comparison,C#,String,String Comparison,我在思考string.Compare()如何在C#中工作的数学问题 两个不相等的字符串在此方法调用中是否可能返回0 我指的是真正不相等的字符串,比如“Herp”和“Derp”,而不是“Herp”和“Hěrp” 不幸的是,除了基本的空情况外,所有的都是内部内容-在.NET之外 我相信是用于此的实际C++代码,但很难确定。 我正在考虑的案例: 奇怪的顺序行为(只不过是最终相等的字符串的排列) 溢出整数,导致比较结果为正数和负数,结果为0 还有比我更精通mscorlib实现的人吗 问这个问题没有具

我在思考
string.Compare()
如何在C#中工作的数学问题

两个不相等的字符串在此方法调用中是否可能返回0

我指的是真正不相等的字符串,比如“Herp”和“Derp”,而不是“Herp”和“Hěrp”

不幸的是,除了基本的空情况外,所有的都是内部内容-在.NET之外

我相信是用于此的实际C++代码,但很难确定。 我正在考虑的案例:

  • 奇怪的顺序行为(只不过是最终相等的字符串的排列)
  • 溢出整数,导致比较结果为正数和负数,结果为0
  • 还有比我更精通
    mscorlib
    实现的人吗

问这个问题没有具体的原因——只是好奇。而且我以前也没见过有人问C#!

我相信,从技术上讲,你的问题的答案是肯定的,这取决于你调用的重载和你传入的选项参数。 根据,可以与具有奇怪的字符顺序值规则的区域性进行比较,甚至可以跳过某些字符:

来电者须知

字符集包括可忽略的字符, String在执行一个字符时不考虑这些字符。 区分区域性的比较。例如,如果以下代码 在.NET Framework 4或更高版本上运行,这是一种区分区域性的比较 “animal”(使用软连字符或U+00AD)表示 这两个字符串是等价的

如果要忽略区域性并只比较2个字符串的原始值,可以调用重载字符串.compare(s1、s2、StringComparison.OrdinalIgnoreCase)。这将导致基本上逐字节的比较:

来电者须知…至 在比较中识别可忽略的字符,并提供值 StringComparison.comparisonType的Ordinal或OrdinalIgnoreCase 参数

请注意,“较大”或“较小”字符串的定义并不一定明显。例如,字符串“abc”是否大于或小于“abcc”?.NET很清楚,为了进行字符串比较,它是较小的。但在依赖这些边缘情况之前,最好仔细阅读文档:

当发现一个不等式或同时发现两个不等式时,比较终止 字符串已比较。但是,如果两个字符串比较相等 到一个字符串的末尾,而另一个字符串包含字符 剩余,则认为包含剩余字符的字符串更大。 返回值是上次执行比较的结果


@ GrantWinney下拉兔子洞——CLR代码只负责处理空的情况。如果字符串要真正比较,它就转到C++代码。注意,在.NET 4中引入了字符串比较的bug,它会破坏传递反对称性,从而破坏排序顺序。我不确定它是否已经固定。参考,或者,如果你想读一个长故事的话,首先让我想到的问题是:D,这里:我明白了。基本上,“CLR中的字符串比较代码是否有已知的bug”-我想答案可能不会,但你需要CLR团队的人来回答。这取决于你所说的不相等,但有一个例子:
string.Compare(“ss”,“ß”),false,CultureInfo.InvariantCulture)==0
。如果调用进行顺序比较的变量,则代码可用(这是始终有效的逐字节代码)。请注意,对
null
值的主调用处理,并快速检查第一个字符是否不同。我指的不是区域性,而是真正不相等的字符串,如“Herp”和“Derp”,而不是“Herp”和“Hěrp”。您如何定义“真正不相等”?@Pheonixblade9:No,这些字符串应该总是不同的。因为比较是按词典进行比较的。如果两个字符串中的两个字符不同,则字符串也不同。关键是,字符当然可以是有点模糊的,也可以是相等的字符。@CommuSoft我问的不是简单的情况,而是疯狂的边缘情况。我知道短字符串可以正确工作:)@JordanRieger你的答案没有错,但不幸的是,这不是我想要的。