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