0

这是情况。我有两个未知类型的对象,我想比较它们是否与另一个相同。两者都可以是字符串、整数、可枚举或您可以想象的任何自定义类。有没有办法使用反射来实现这一点?

谢谢 !

4

3 回答 3

1

使用Object.ReferenceEqualsGetType

从 MSDN 中提取的示例:

int n1 = 12;
int n2 = 82;
long n3 = 12;

Console.WriteLine("n1 and n2 are the same type: {0}",
                  Object.ReferenceEquals(n1.GetType(), n2.GetType()));
Console.WriteLine("n1 and n3 are the same type: {0}",
                  Object.ReferenceEquals(n1.GetType(), n3.GetType()));
// The example displays the following output: 
//       n1 and n2 are the same type: True 
//       n1 and n3 are the same type: False    

来源:http: //msdn.microsoft.com/en-us/library/system.object.gettype.aspx

不过,我可能误解了。这将仅检查它们是否为相同类型,具有不同引用的相同类型的两个对象仍将评估为true使用此方法。

于 2013-04-25T17:55:23.203 回答
0

Equals在一般情况下,您使用来自对象的方法。

object first = GetFirst();
object second = GetSecond();

bool areEqual = object.Equals(first, second);

编写需要比较编译时未知类型的特定函数(通常是泛型函数)时,另一个选择是IEqualityComparer接受Equals一个或您类型的用户,如果它是针对整个班级的)可以提供他们自己的实现。一个很好的例子是诸如string.Contains. 有一个可选的重载接受一个IEqualityComparer<char>允许调用者定义两个字符相等的含义。

于 2013-04-25T17:49:10.920 回答
0

如果您的课程覆盖Equals,请使用 Servy 的方法。否则,您可以使用CompareNetObjects库(在 nuget 上可用)。

是一个通过公共属性比较两个对象的示例。

于 2013-04-25T17:52:42.783 回答