C#의 두 값이 동일했는지 어떻게 확인할 수 있습니까? (모든 유형의 가치가 주어짐)
문제
여기 에이 코드가 있습니다.이 코드는 모든 유형의 인수를 허용하기위한 것입니다.
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
}
}
제휴하지 않습니다 StackOverflow