有时,必须使用常量检查值是否相等。在这种情况下,我总是看到这样的代码:
if (!string.IsNullOrEmpty(text))
{
if (text == "Some text here")¹
{
// Do something here.
}
}
就我而言,我宁愿写:
if ("Some text here".Equals(text))
{
// Do something here.
}
毕竟,如果text
为null
,Equals
将返回false
,这是预期的。常量和变量的反转感觉很奇怪,但对初学者来说仍然可以理解,并且避免NullReferenceException
抛出的text.Equals("Some text here")
。
我错过了什么吗?
为什么我见过的所有源代码都使用第一个示例中的语法,而不是第二个示例中的语法?
¹在实际代码中,它宁愿是常量字段或只读字段。为了缩短示例,我将字符串内联。
答案 0 :(得分:11)
在这种情况下,我总是看到这样的代码:
你认为这是奇怪的和不必要的是正确的,因为它是。这是一个完全多余的null
或空检查。坦率地说,我会在代码审查中告诫这样的代码。
if (text == "Some text here") {
// Do something here.
}
非常好,这就是我使用的。
我错过了什么吗?
不,你没有遗漏任何东西。
为什么我见过的所有源代码都使用第一个示例中的语法,而不是第二个示例中的语法?
因为你在错误的地方寻找爱情?
答案 1 :(得分:5)
这就没有错。
if (text == "Some text here")
{
// Do something here.
}
无需检查null / empty,因为它无论如何都不会相等。
如果您希望使用Equals
方法,则有一个对空值不敏感的版本。
if (string.Equals(text, "Some text here"))
{
// Do something here.
}
答案 2 :(得分:2)
只要您有文字或某些您不知道null
的内容,您的版本就可以了。
另一方面,如果你有
if (text1.Equals(text2))
然后显然你需要防御text1
null
。
但我会在此处停止使用Equals
并使用==
,从而无需进行null
检查
if (text1 == text2)
您是否因为Java根源而更喜欢使用Equals
?
答案 3 :(得分:0)
我认为这是人性,当你比较smth时,你总是将“你的”东西与别人比较。而不是相反,我认为同样的自然思想也去了C#编码:)
答案 4 :(得分:0)
我会使用if (text == "Some text here")
。它清晰,简洁,快速。您引用的IsNullOrEmpty
检查可能是(最可能无用的)微优化。