比较两个未知类型对象



情况是这样的。我有两个未知类型的对象,我想比较它们是否相同。两者都可以是string、int、enumerable或任何你能想到的自定义类。有没有办法使用反射来实现这个?

谢谢!

一般情况下使用对象的Equals方法。

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

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

使用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

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

下面是一个比较两个对象的公共属性的例子

相关内容

  • 没有找到相关文章

最新更新