如何检查c#中的两个值是否相等? (给定任何类型的价值)

时间:2009-05-06 09:55:57

标签: c# types equals

我这里有这个代码,它允许任何类型的参数:

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

如果我使用几个整数调用它,它表现不佳。

AreEqual(3, 3)   // prints Not Equal

5 个答案:

答案 0 :(得分:16)

最简单的一级:

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");
    }
}

答案 1 :(得分:4)

只是为了强调“奇怪”行为的原因是因为当你将int转换为对象boxing时。两个3都转换为对象,然后你不再比较数字,你正在比较引用,这将是不一样的。

答案 2 :(得分:3)

要检查两个对象值是否相等,请使用:

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

正常==运算符假设object是引用类型(尽管值类型也来自对象)。

答案 3 :(得分:2)

尝试:

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))

所以请回答他的回答。

答案 4 :(得分:-3)

if (expectedValue != null)
{
    if (expectedValue.Equals(actualValue))
    {
        // enter code here
    }
}