11

在某些语言(例如 C++)中,您不能使用 == 之类的运算符进行字符串比较,因为它会比较字符串对象的地址,而不是字符串本身。但是,在 C# 中,您可以使用 == 来比较字符串,它实际上会比较字符串的内容。但是也有字符串函数来处理这种比较,所以我的问题是;你应该?

给定两个字符串:

string aa = "aa"; 
string bb = "bb";

您是否应该像这样比较它们:

bool areEqual = (aa == bb); 

或者您应该使用 Equal 函数,如下所示:

bool areEqual = aa.Equals(bb); 

反正有技术上的区别吗?还是最佳实践的合理论据?

4

5 回答 5

25

我不会使用:

aa.Equals(bb)

除非我知道 aa不可能空。我可能会使用:

string.Equals(aa,bb)

但我主要使用它我想使用其中一种特定StringComparison模式(不变量、序数、不区分大小写等)。虽然我也可能使用这些StringComparer实现,因为它们更容易抽象(例如,传递给Dictionary<string, Foo>不区分大小写的序数字典)。对于一般用途,

a == b

很好。

于 2009-12-28T10:12:25.903 回答
25

这是运算符的实现:

    public static bool operator == (String a, String b) {
       return String.Equals(a, b);
    }

不要为此失眠。

于 2009-12-28T10:22:41.973 回答
2

没有技术差异(除非 aa 为空)。使用对您来说更好的任何东西。在我看来,使用运算符重载可以使代码更清晰。

当您需要(或将来可能需要)它们的附加参数时使用函数(如在 CompareTo() 中)

于 2009-12-28T10:13:53.597 回答
1

最佳实践方面,我倾向于始终使用 Equals() 函数进行字符串比较。这清楚地表明,当其他人阅读您的代码时,您特别希望比较字符串。

于 2009-12-28T10:17:49.813 回答
-3

一般而言, == 进行指针相等,而 .equals 检查属性是否相等。所以如果你做了类似的事情

a = 'a';
b = 'a';
bool c = (a == b);
bool d = (a.Equals(b))

那么 c 应该返回 false 并且 d 应该是 true。

于 2009-12-28T10:20:07.317 回答