我正在重载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;
所以现在在_valOne
的比较之后,不再进行价值比较。这似乎非常重复,笨重,而且(最重要的是)可读性太可怕了。我想知道是否有任何方法可以在不使用&&的情况下以干净的方式将此代码减少到相同的效果。操作
答案 0 :(得分:5)
您可以利用逻辑AND(&&
)运算符的short-circuiting性质,如下所示:
return this._valOne == myClass._valOne
&& this._valTwo == myClass._valTwo
&& this._valThree == myClass._valThree;
只要任何一个比较评估为false,整个条件的评估结果为false。如果所有三个都为真,则条件返回true。
答案 1 :(得分:1)
使用和条件:
areEqual = (this._valOne == myClass._valOne)
&& (this._valTwo == myClass._valTwo)
&& (this._valThree == myClass._valThree);
&安培;&安培;默认情况下实现短路。
答案 2 :(得分:0)
另一种方法可能是这样做:
if (this._valOne != myClass._valOne)
return false;
if (this._valTwo != myClass._valTwo)
return false;
if (this._valThree != myClass._valThree)
return false;
return true;
我想是一个选择问题。我认为&&一个更具可读性..