C#의 두 값이 동일했는지 어떻게 확인할 수 있습니까? (모든 유형의 가치가 주어짐)

StackOverflow https://stackoverflow.com/questions/828896

  •  06-07-2019
  •  | 
  •  

문제

여기 에이 코드가 있습니다.이 코드는 모든 유형의 인수를 허용하기위한 것입니다.

public static void AreEqual(object expectedValue, object actualValue) {
    if (expectedValue == actualValue) {
        HttpContext.Current.Response.Write("Equal");
    } else {
        HttpContext.Current.Response.Write("Not Equal");
    }
}

몇 개의 int를 사용하여 호출하면 잘 작동하지 않습니다.

AreEqual(3, 3)   // prints Not Equal
도움이 되었습니까?

해결책

가장 간단한 수준에서 :

public static void AreEqual(object expectedValue, object actualValue) {
    if (object.Equals(expectedValue,actualValue)) {
            HttpContext.Current.Response.Write("Equal");
    } else {
            HttpContext.Current.Response.Write("Not Equal");
    }
}

또는 제네릭 (지원 IEquatable<T>):

public static void AreEqual<T>(T expectedValue, T actualValue) {
    if (EqualityComparer<T>.Default.Equals(expectedValue,actualValue)) {
            HttpContext.Current.Response.Write("Equal");
    } else {
            HttpContext.Current.Response.Write("Not Equal");
    }
}

다른 팁

"이상한"행동의 이유를 강조하기 위해 권투 발생합니다. 두 개의 3은 객체로 변환 된 다음 더 이상 숫자를 비교하지 않으며 참조를 비교하고 동일하지 않습니다.

두 객체 값이 동일하게 사용되는지 확인하려면 다음과 같습니다.

if (Object.Equals(expectedValue, actualValue)) {

정상 == 연산자가 an을 가정합니다 object 기준 유형입니다 (값 유형이 객체에서 내려 오는 사실에도 불구하고).

노력하다:

if (expectedValue.Equals(actualValue))

물론 당신은 처리해야합니다 null, 당신은 이것을 시도해야합니다 :

Boolean eq = false;
if (expectedValue == null || actualValue == null)
    eq = (expectedValue == actualValue);
else
    eq = expectedValue.Equals(actualValue);

if (eq) {
    HttpContext.Current.Response.Write("Equal");
} else {
    HttpContext.Current.Response.Write("Not Equal");
}

이것은 물론 동일합니다 @Mike Nelson답변 :

if (Object.Equals(expectedValue, actualValue))

그러니 그의 대답을 위로 가십시오.

if (expectedValue != null)
{
    if (expectedValue.Equals(actualValue))
    {
        // enter code here
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top