【发布时间】:2011-12-06 00:20:29
【问题描述】:
我想检查两个没有公共属性的对象是否相等。但是,我不想重写 Equals & GetHashCode 方法,或者实现 IEquatable。例如,考虑以下代码:
class Program
{
static void Main(string[] args)
{
Guid id = Guid.NewGuid();
string personName = "MyName";
MyClass object1 = new MyClass(id, personName);
MyClass object2 = new MyClass(id, personName);
//This returns false, but I'd like it to return true:
Console.WriteLine(object1.Equals(object2));
//[edit]...by using, for example:
Console.WriteLine(ObjectsAreEqual(object1, object2));
}
}
class MyClass
{
private Guid _id;
private string _personName;
public MyClass(Guid id, string personName)
{
_id = id;
_personName = personName;
}
}
我知道标准方法是重写 Equals & GetHashCode,但由于种种原因,我不想更改类中的任何代码。另外,没有公共属性,所以我无法比较这些。有没有其他方法可以实现这一点?
例如,通过反射?或者也许通过将对象序列化为 JSON,并比较结果字符串?
谢谢。
【问题讨论】:
-
我不确定我是否理解:如果你想将它们与 object.Equals 进行比较,你必须重写它,如果没有,你可以只为 MyClass 使用 MyEqual 方法,然后做任何你想做的事情想去那里...
-
»我想渡过那条河。不,不是通过那里那座明显的桥。不,我也不会游泳,更不用说飞了。事实上,我根本无法动弹。你能帮帮我吗?«
-
JSON 和 XML 序列化都不会帮助您,因为它们不知道私有字段
-
乔伊,我不确定这是一个暗示,还是我错过了一些完全明显的东西的声明......!
-
Amittai,我想我的代码不是 100% 准确 - 我不一定需要使用 Object.Equals()。我可以调用一个方法: ObjectsAreEqual(obj1, obj2) 代替,该方法在不使用 Object.Equals 的情况下检测相等性。