string.compare()中有些奇怪的东西

时间:2017-03-10 09:20:14

标签: c# string

在这里,当我将字符串" .doc" 与字符串" .exe" 进行比较时,我不明白,Compare方法给出-1值,false为返回值。它必须返回True和1值作为回报,因为我将其设置为" == 1"

当我将字符串" .exe" 与字符串" .txt" 和字符串"进行比较时.exe" 它提供有效的返回值。

谁能告诉我这里到底发生了什么?

int nDocValue = string.Compare(".doc", ".exe");          
Console.WriteLine(nDocValue);                            // Will display -1
Console.WriteLine(string.Compare(".doc", ".exe") == 1);  // False

int nTxtValue = string.Compare(".txt", ".exe");          
Console.WriteLine(nTxtValue);                            // Will display 1
Console.WriteLine(string.Compare(".txt", ".exe") == 1);  // True

int nExeValue = string.Compare(".exe", ".exe");          
Console.WriteLine(nExeValue);                            // Will display 0
Console.WriteLine(string.Compare(".exe", ".exe") == 1);  // False

4 个答案:

答案 0 :(得分:4)

来自MSDN String.Compare (String strA, String strB),请参阅返回值部分:

  • 小于零 - strA在排序顺序中位于strB之前。
  • - strA与排序顺序中的strB位于同一位置。
  • 大于零 - strA遵循排序顺序中的strB。

以下是扩展字符串的排序顺序:

.doc
.exe
.txt

在您的第一个示例中,".doc"位于".exe"之前,并且您的小于零返回值

注意该规范并未说明大于零等于1。您不应该依赖该值并与== 1进行比较。你应该与零比较。以下是您可能使用的不同比较

  • result < 0 - 检查strA是否按排序顺序排在strB之前:string.Compare(".doc", ".exe")
  • result == 0 - 检查strA是否等于strB:string.Compare(".exe", ".exe")
  • result > 0 - 检查strA是否按排序顺序排在strB之后:string.Compare(".txt", ".exe")

答案 1 :(得分:3)

您是否阅读了有关string.Compare()的MSDN页面?它返回一个值&lt;如果第一个字符串小于(按字典顺序排列)第二个字符串,则值为0;如果它更大则为0,如果它们相等则为0。

doc < exe < txt

请注意,如果您只需要检查是否相等,那么使用==运算符或string.Equals()会更好。

bool bDocValue = string.Equals(".doc", ".exe"); // False
bool bDocValue2 = ".doc" == ".exe"; // False

答案 2 :(得分:2)

您必须仅与零进行比较:

  • 任何负值表示第一个字符串少

    .doc
    .exe
     ^______ `d` goes before `e`
    
  • 零表示字符串相等

    .exe
    .exe
        ^___ strings are equal
    
  • 任何正值表示第一个字符串更大

    .txt
    .exe
     ^______ `t` goes after `e`
    

答案 3 :(得分:0)

.Compare()不仅检查是否相等。检查更大,次要或相等。经常用于排序algorythms。检查接口定义。

https://msdn.microsoft.com/en-us/library/system.collections.icomparer(v=vs.110).aspx