c#中的反身对象,10不是10?

时间:2017-02-08 09:43:25

标签: c#

我正在测试reflexibe对象以创建一个方法来获取两个对象whitout之间的更改知道该类,我得到了这个:

enter image description here

name,apellido和otromas是字符串。 edad是一个int。

1 个答案:

答案 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