使用==或Equals进行字符串比较
在某些语言(例如C ++)中,您不能使用==等运算符进行字符串比较,因为它会比较字符串对象的地址,而不是字符串本身。 但是,在C#中,您可以使用==来比较字符串,它实际上会比较字符串的内容。 但是也有字符串函数来处理这种比较,所以我的问题是; 你应该?
给出两个字符串:
string aa = "aa"; string bb = "bb";
你应该像这样比较它们:
bool areEqual = (aa == bb);
或者你应该使用Equal函数,如下所示:
bool areEqual = aa.Equals(bb);
反正有技术差异吗? 或者最佳实践的合理论据?
我不会用:
aa.Equals(bb)
除非我知道 aa
不可能是null。 我可能会用:
string.Equals(aa,bb)
但我主要使用它我想使用一种特定的StringComparison
模式(不变量,序数,不区分大小写等)。 虽然我也可以使用StringComparer
实现,因为它们更容易抽象(例如,传递给Dictionary
以获取不区分大小写的序数字典)。 对于一般用途,
a == b
很好。
这是运营商的实施:
public static bool operator == (String a, String b) { return String.Equals(a, b); }
不要为此失眠。
没有技术差异(除非aa为空)。 使用任何看起来更好的东西。 在我看来,使用运算符重载使代码更清晰。
在需要(或将来可能需要)其他参数时使用函数(如在CompareTo()中)
最佳实践,我倾向于总是使用Equals()函数进行字符串比较。 当其他人读取您特别想要比较字符串的代码时,这一点就很清楚了。
一般来说,==做指针相等,而.equals检查属性是否相等。 所以,如果你做了类似的事情
a = 'a'; b = 'a'; bool c = (a == b); bool d = (a.Equals(b))
那么c应该返回false而d应该是true。