这是情况。我有两个未知类型的对象,我想比较它们是否与另一个相同。两者都可以是字符串、整数、可枚举或您可以想象的任何自定义类。有没有办法使用反射来实现这一点?
谢谢 !
这是情况。我有两个未知类型的对象,我想比较它们是否与另一个相同。两者都可以是字符串、整数、可枚举或您可以想象的任何自定义类。有没有办法使用反射来实现这一点?
谢谢 !
使用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
使用此方法。
Equals
在一般情况下,您使用来自对象的方法。
object first = GetFirst();
object second = GetSecond();
bool areEqual = object.Equals(first, second);
编写需要比较编译时未知类型的特定函数(通常是泛型函数)时,另一个选择是IEqualityComparer
接受Equals
一个或您类型的用户,如果它是针对整个班级的)可以提供他们自己的实现。一个很好的例子是诸如string.Contains
. 有一个可选的重载接受一个IEqualityComparer<char>
允许调用者定义两个字符相等的含义。
如果您的课程覆盖Equals
,请使用 Servy 的方法。否则,您可以使用CompareNetObjects库(在 nuget 上可用)。
这是一个通过公共属性比较两个对象的示例。