如何检查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");
    }
}

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

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

其他提示

只是为了突出<!>“奇怪的<!>”的原因;行为是因为当你将一个int转换为对象拳击时。两个3都转换为对象,然后你不再比较数字,你正在比较引用,这将是不一样的。

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

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

正常==运算符假设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