字符串比较没有空检查

时间:2012-10-06 22:20:22

标签: .net string null

我记得很久以前在某个地方读过一个字符串对象来检查一个字符串(或一个常量等)字符串,跳过null检查的方法是:

string a;
// do something
if("some literal string".Equals(a))
    Console.WriteLine("equal");

是首选而不是

string a;
// do something
if(a!=null && a.Equals("some literal string"))
    Console.WriteLine("equal");

跳过检查null。但是现在无法找到有关它的信息;你对前者有异议或担忧吗?

2 个答案:

答案 0 :(得分:8)

您可能正在考虑使用Java,需要使用equals以便对字符串执行真正的值相等性检查; ==只会比较身份参考。

但是,C#有运算符重载 - 而string重载==表示相等。所以写得很好:

if (text == "target value")

==运算符在比较的任一侧(或两侧)处理null

  • 如果双方都为空,则结果为真
  • 如果正好一边为空,则结果为false
  • 否则,比较字符串的顺序

但请注意,仅当两个表达式的编译时类型为string时才会使用重载。例如,如果你有:

object o = new String("foo".ToCharArray());
if (o == "foo")

...然后将比较引用而不是使用重载运算符。

答案 1 :(得分:1)

我更喜欢使用:

if (String.Equals("Value", a))

比较两个都可以null的变量时,它特别方便 - 使用这个静态方法也可以涵盖这种情况。