값 비교를 위해 Equality 메서드가 오버로드되고 값 비교 중 하나가 false를 반환하면 false
을 반환하는 명확한 방법이 있는지 궁금합니다. 변수가 특정 값으로 설정 되 자마자 변수를 반환하십시오. Equality 오버로드
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
의 비교 후. 이것은 매우 반복적이고, clunky하고, (가장 중요하게는) 가독성을 위해 끔찍한 것처럼 보입니다. 이 코드를 & & 연산자를 사용하지 않고도 동일한 효과로 깨끗하게 줄일 수있는 방법이 있는지 알고 싶습니다.
나는 이것을하는 것에 대해 생각했지만 여러 분야에서 나는 그것이 나빠질 수도 있다고 생각했다. 나는 그것이 효과적 일 것이라는 것을 깨닫고이 문제에 대한 유일한 해결책 일지 모르지만 당신이 생각할 수있는 다른 방법이 있습니까? – 7ogan
유일한 다른 방법은 Raze2Dust의 다른 답변으로, 각 조건을 수동으로 "떨어 뜨려"거짓으로 되돌아 오는 즉시 반환하는 것입니다. && 연산자는 C# 논리 연산자의 단락 된 동작과 매우 유사한 작업을 수행합니다. – KeithS