簡體   English   中英

如何檢查c#中的兩個值是否相等? (給定任何類型的價值)

[英]How can I check if two values in c# are equal? (Given any type of value)

我這里有這個代碼,它允許任何類型的參數:

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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM