在 C# 中,String.CompareOrdinal(strA, strB)相当于String.Compare(strA, strB, StringComparison.Ordinal)?
我检查了https://msdn.microsoft.com/en-us/library/e6883c06.aspx上的文档,它没有提到这一点。
有时,必须使用常量检查值是否相等.在这种情况下,我总是看到这样的代码:
if (!string.IsNullOrEmpty(text))
{
if (text == "Some text here")¹
{
// Do something here.
}
}
Run Code Online (Sandbox Code Playgroud)
就我而言,我宁愿写:
if ("Some text here".Equals(text))
{
// Do something here.
}
Run Code Online (Sandbox Code Playgroud)
毕竟,如果text是null,Equals将返回false,这是预期的.常量和变量的反转感觉很奇怪,但对初学者来说仍然是可以理解的,并且避免了NullReferenceException它会被抛出text.Equals("Some text here").
我错过了什么吗?
为什么我见过的所有源代码都使用第一个示例中的语法,而不是第二个示例中的语法?
¹在实际代码中,它宁愿是常量字段或只读字段.为了缩短示例,我将字符串内联.
可能重复:
如何识别拼写不同的相似单词
在比较这三个字符串:“ voest”,“ vost”和“vöst”(德国文化)时,我试图使它返回true,因为它是同一个词。(实际上,只有oe和ö相同,但是例如对于DB归类CI来说是相同的,这是正确的,因为'vost'是错误键入的'voest')
无论我提供给该方法什么参数,string.Compare(..)/ string.Equals(..)始终返回false。
如何使string.Compare()/ Equals(..)返回true?
当我比较输入的两个变量object并且两者都包含相同的值时,使用==运算符的比较结果产生false.
object Var1 = "X";
object Var2 = "X";
// This produces false result
bool Match = Var1 == Var2;
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
编辑:上面是实际工作的代码!
我基于我的真实代码,它看起来像这样,不起作用:
ChoiceValue = Choice.GetValue(FieldTemplate.ValueDataType);
if (ChoiceValue == Field.Value) RadioButton.IsChecked = true;
Run Code Online (Sandbox Code Playgroud)
ChoiceValue是object和也是Field.Value属性类型object.
显然在不同情况下的工作方式不同.