Я перегружаю метод 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
s больше не производится сравнение значений. Это кажется очень повторяющимся, неуклюжим и (что наиболее важно) ужасным для удобства чтения. Я хочу знать, можно ли каким-либо образом уменьшить этот код до того же эффекта без использования оператора &&.