我试图查看C#字符串类中实现比较运算符的代码。我发现如下内容:
//THIS IS NOT WHAT I MEANT
public static bool Equals(object objA, object objB)
{
return ((objA == objB) || (((objA != null) && (objB != null)) && objA.Equals(objB)));
}
//THIS IS WHAT I SEE REALLY and the above is what I would expect to see
public static bool Equals(string a, string b)
{
return ((a == b) || (((a != null) && (b != null)) && EqualsHelper(a, b)));
}
public static bool operator ==(string a, string b)
{
return Equals(a, b);
}
我不知道是反射器在捉弄我,还是当我试图为自己的类实现这个策略时,Equals和重载的==运算符之间产生了无限循环(如预期的那样)。字符串类有什么不同,还是我的反射器报告有误?
static Equals(object o1, object o2)
如何将Object类的方法添加到String类中?
==
运算符来避免所有这些混淆。使用ReferenceEquals
来检查引用相等性,它要少得多含糊不清。 - phoog