答案 0 :(得分:2)
最好在此区域中使用object.Equals(value1, value2)
。
==符号实际执行object.ReferenceEquals
并检查两个对象的内存地址是否相同而不是实际值。
var value1 = (object)1;
var value2 = (object)1;
Console.WriteLine(value1 == value2); // False
Console.WriteLine(object.ReferenceEquals(value1, value2)); // False
Console.WriteLine(value1.Equals(value2)); // True
Console.WriteLine(object.Equals(value1, value2)); // True
最好使用object.Equals
而不是value1.Equals
,因为以下将value1更改为null的示例将导致抛出异常
var value1 = (object)null;
var value2 = (object)1;
Console.WriteLine(value1 == value2); // False
Console.WriteLine(object.ReferenceEquals(value1, value2)); // False
Console.WriteLine(value1.Equals(value2)); // NullReferenceException
Console.WriteLine(object.Equals(value1, value2)); // False