以下是控制台应用程序的代码片段 -
class MyClass
{
public int GetDay(string data22)
{
int returnValue = 0;
if (string.Compare(data22,"THURSDAY") == 0) // true
{
returnValue = (int)DayOfWeek.Thursday;
}
if (data22 == "THURSDAY") //false
{
returnValue = (int)DayOfWeek.Thursday;
}
if (string.Equals(data22, "THURSDAY"))//false
{
returnValue = (int)DayOfWeek.Thursday;
}
return returnValue;
}
}
class Program
{
static void Main(string[] args)
{
string ExecutionDay = "THURSDAY";
MyClass obj1 = new MyClass();
int MyDays = obj1.GetDay(ExecutionDay);
}
}
问题是 - 为什么第一个比较 (string.compare) 有效,而其他两个比较方法在这种特殊情况下不起作用?
为什么第一个比较(string.compare)有效,而其他两个比较有效
比较方法在这种特殊情况下不起作用
有一些看不见的字符(特别是从左到右标记 https://en.wikipedia.org/wiki/Left-to-right_mark(感谢@MatthewWatson))在您的代码中。您可以使用任何十六进制编辑器查看它们:
这被忽视了string.Compare
,虽然它不与string.Equals
。你可以在the docs https://msdn.microsoft.com/en-us/library/84787k22(v=vs.110).aspx:
来电者须知:
字符集包括可忽略的字符。这
比较(字符串,字符串)方法时不考虑此类字符
它执行文化敏感的比较。例如,如果
以下代码在 .NET Framework 4 或更高版本上运行,
“动物”与“动物”的文化敏感比较(使用软
连字符或 U+00AD) 表示两个字符串是等效的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)