1

我正在重载 Equality 方法以进行值比较,并且想知道是否有一种干净的方法可以false在其中一个值比较返回 false 时立即返回。例如,这是基本思想:

public class MyClass
{
    private int _valOne;
    private int _valTwo;
    private int _valThree;

    public MyClass(int valOne, int valTwo, int valThree)
    {
        _valOne = valOne;
        _valTwo = valTwo;
        _valThree = valThree;
    }

    public override bool Equals(object obj)
    {
        // If the object is null return false
        if (obj == null)
        {
            return false;
        }

        // If the object is not of MyClass type return false
        MyClass myClass = obj as MyClass;
        if (myClass == null)
        {
            return false;
        }

        // Now compare all the field values
        bool areEqual = false;
        areEqual = (this._valOne == myClass._valOne);
        areEqual = (this._valTwo == myClass._valTwo);
        areEqual = (this._valThree == myClass._valThree);

        return areEqual;
    }
}

_valOne' 不等于。最有效的比较方法是在false知道两个值不相等时立即返回。类似于以下内容...

        // Now compare all the field values
        bool areEqual = false;

        areEqual = (this._valOne == myClass._valOne);
        if (!areEqual)
        {
            return false;
        }

        areEqual = (this._valTwo == myClass._valTwo);
        if (!areEqual)
        {
            return false;
        }

        areEqual = (this._valThree == myClass._valThree);

        return areEqual;

所以现在在比较_valOnes 之后不再进行值比较。这似乎非常重复、笨拙,而且(最重要的是)可读性很差。我想知道是否有任何方法可以在不使用 && 运算符的情况下以干净的方式将这段代码简化为相同的效果。

4

3 回答 3

5

您可以利用逻辑 AND ( ) 运算符的短路&&特性,如下所示:

return this._valOne == myClass._valOne
    && this._valTwo == myClass._valTwo
    && this._valThree == myClass._valThree;

只要任何一个比较评估为假,整个条件就会评估为假。如果这三个都为真,则条件返回真。

于 2011-03-25T18:18:42.823 回答
1

使用 and 条件:

areEqual = (this._valOne == myClass._valOne) 
    && (this._valTwo == myClass._valTwo) 
    && (this._valThree == myClass._valThree);

&& 默认实现短路。

于 2011-03-25T18:20:22.213 回答
0

另一种方法可能是这样做:

    if (this._valOne != myClass._valOne)
         return false;
    if (this._valTwo != myClass._valTwo)
         return false;
    if (this._valThree != myClass._valThree)
         return false;
    return true;

我猜是选择问题。我认为 && 一个更具可读性..

于 2011-03-25T18:53:13.277 回答