[英]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.