在这里,当我将字符串" .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
答案 0 :(得分:4)
来自MSDN String.Compare (String strA, String 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