値の比較のために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
年代が等しくないと言います。比較する最も効率的な方法は、2つの値が等しくないことがわかったらすぐに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
秒の比較後。これは非常に反復性があり、不器用で、(最も重要なことに)読みやすさの面で恐ろしいようです。私は、このコードを同じ効果に、& &オペレータを使用せずにクリーンな方法で減らすことができるかどうかを知りたいと思います。
私はこれをやろうと考えていましたが、いくつかのフィールドでは手に入らないと思っていました。私はそれが機能し、この問題の唯一の解決策かもしれませんが、あなたが考えることができる他の方法はありますか? – 7ogan
Raze2Dustのもう1つの答えは、手動で各条件をフォロースルーし、誤って戻ったときにすぐに戻るという唯一の方法です。 &&演算子は、C#論理演算子の短絡動作と非常によく似た動作をします。 – KeithS