情况如下。我有两个未知类型的对象,我想比较,知道一个是否与另一个相同。两者都可以是string,int,enumerable或您可以想象的任何自定义类。有没有办法用反射来实现这个目标?
谢谢!
答案 0 :(得分:1)
使用Object.ReferenceEquals
和GetType
从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是一个通过公共属性比较两个对象的示例。