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

给定两个串:

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

如果您对它们进行比较是这样的:

bool areEqual = (aa == bb); 

还是应该用平等的功能,像这样的:

bool areEqual = aa.Equals(bb); 

有什么区别的技术呢?或合理的论点的最佳做法?

有帮助吗?

解决方案

我不会使用:

aa.Equals(bb)

除非我知道 aa不可能的可能的为空。我可以使用:

string.Equals(aa,bb)

但是我主要是使用它,我想用特定StringComparison模式(不变的,序数,不区分大小写的,等等)中的一个。虽然我也可以用StringComparer实现,因为它们更容易一点抽象的(例如,通过成Dictionary<string, Foo>为不区分大小写的顺序字典)。对于一般用途的使用量,

a == b

是细

其他提示

这是操作者的实现:

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

不会失去任何睡眠超过这一点。

有没有技术差异(除非aa为空)。无论使用哪种更好看你。在我看来,使用操作符重载使得代码更清晰。

使用功能,当你需要(或将来可能需要)的额外的参数(如的CompareTo())

最佳实践的角度来看,我会倾向于总是使用等号()函数字符串比较。这清楚当别人读你的代码,你特别想要的字符串进行比较。

一般来讲,确实==指针相等,而.equals检查是否属性相等。所以,如果你不喜欢的东西。

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

则c应该返回false和d应该是真实的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top