【发布时间】:2016-08-23 06:56:31
【问题描述】:
我需要检查给定的实例是否与集合匹配(两者都是未知类型)。
看看
void Main()
{
// Employee "John" Object got from Service Layer #1
Object obj1 = Client1.GetObject("John");
// Employee "John" Object got from Service Layer #2
Object obj2 = Client2.GetObject("John");
bool flag = CheckEquality(obj1, obj2); // Both objects are Unknown Type
}
等式检查方法:
public bool CheckEquality(object obj1, object obj2)
{
// Solution for Determining equality for unknown types
}
例如 - 考虑以下代码:(仅用于理解目的)
场景 #1
public class EmpPerson
{
public int ID { get; set; }
public string Name { get; set; }
public string Address { get; set; }
}
obj1 持有实例new EmpPerson() { ID = 1, Name = "John", Address = "Los Angeles" };
obj2 持有实例new EmpPerson() { ID = 1, Name = "John", Address = "Los Angeles" };
场景 #2
obj1 持有值"John Smith"。
obj2 持有值"John Smith"。
场景#3
obj1 持有值"John Smith"。
obj2 持有实例new EmpPerson() { ID = 1, Name = "John", Address = "Los Angeles" };
场景#4
obj1 持有值new UnknownTypeA()。
obj2 持有值new UnknownTypeX()。
我需要检查两个对象是否相同。
请帮助我。如何检查未知类型的相等性。
【问题讨论】:
-
那么可能涉及到哪些其他类型?根据 cmets 之前在另一个问题中的说法,该类型是否可能具有任何“隐藏”状态,而不是由字段公开?它可以包含一个集合吗?它是否可以包含
Random属性,作为隐藏其状态的类型的示例?它可以包含循环引用吗?这通常是不可能的,但如果你限制所涉及的类型,你可以通过反射来做到这一点。 (你确实需要小心循环引用......) -
在场景 #2 中,
obj1和obj2只是字符串,还是它们也是EmpPerson类型但您只知道名称? -
您确实需要说明如何检查是否相等。如果
obj1只包含名称,而obj2包含相同的名称以及ID 和地址,那么它们是否相等? -
“它包含随机属性”是指类型可以包含
System.Random类型的属性吗?如果是这样,游戏就结束了 - 你真的无法比较Random实例的相等性。 -
如果您给出场景的预期结果也会有所帮助 - 在场景 4 中,如果
obj1和obj2具有相同的属性,但它们属于不同的类型,应该这样算不算相等?
标签: c# .net observablecollection iequalitycomparer data-compression