在C#中的反射性对象,10不是10?

9 浏览
0 Comments

在C#中的反射性对象,10不是10?

我正在测试反射对象,以便创建一个方法来获取两个对象之间的差异,而无需了解类,我得到了这个:\n\"enter\nname、apellido和otromas是字符串。\nedad是一个整数。

0
0 Comments

Reflexive objects in c#指的是在C#中处理反身对象的问题。在C#中,使用"=="符号进行比较时,实际上会执行object.ReferenceEquals方法,它检查两个对象的内存地址是否相同,而不是比较实际的值。这就导致了一些问题。

在处理反身对象时,最好使用object.Equals(value1, value2)方法。以下是一个例子:

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

可以看到,使用"=="符号进行比较时,结果是False,而使用object.Equals方法进行比较时,结果是True。这是因为object.Equals方法会比较两个对象的实际值。

另外,为了避免出现异常,最好使用object.Equals方法而不是value1.Equals方法。以下是一个例子:

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

可以看到,当value1为null时,使用value1.Equals方法会引发NullReferenceException异常,而使用object.Equals方法则不会出现异常。

因此,在处理反身对象时,最好使用object.Equals方法进行比较,而不是使用"=="符号或value1.Equals方法。这样可以避免出现异常,并获得正确的比较结果。

0