比较两个未知类型的对象

时间:2013-04-25 17:47:25

标签: c# reflection equals

情况如下。我有两个未知类型的对象,我想比较,知道一个是否与另一个相同。两者都可以是string,int,enumerable或您可以想象的任何自定义类。有没有办法用反射来实现这个目标?

谢谢!

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

在一般情况下,您可以使用object中的Equals方法。

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

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

编写需要比较编译时未知类型的特定函数(通常是通用函数)时的另一个选择是接受IEqualityComparer,以便在类型没有Equals的实现时1}}在上下文中,你的方法的调用者(或者你的类型的用户,如果它是整个类的)可以提供他们自己的实现。一个很好的例子就是像string.Contains这样的方法。有一个可选的重载接受IEqualityComparer<char>,允许调用者定义两个字符相等的含义。

答案 2 :(得分:0)

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

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