1

我记得很久以前在某处读过,要根据文字(或常量等)字符串检查 String 对象,跳过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。但是现在找不到有关它的信息;您对前者有任何异议或疑虑吗?

4

2 回答 2

8

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

然而,C# 具有运算符重载 - 和相等性string重载==。所以可以这样写:

if (text == "target value")

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

  • 如果两边都为空,则结果为真
  • 如果恰好一侧为空,则结果为假
  • 否则,将比较字符串的序数相等性

但是请注意,只有在两个表达式的编译时类型都是 . 时才会使用重载string。例如,如果您有:

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

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

于 2012-10-06T22:26:08.677 回答
1

我更喜欢使用:

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

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

于 2012-10-06T22:23:38.737 回答