我这里有这个代码,它允许任何类型的参数:
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
答案 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
}
}