我有一个Account
课程:
class Account
{
List<Contact> Contacts;
// other properties, constructor, etc.
}
使用Visual Studio Community 2017,在打开此课程的快速操作菜单时,我可以选择&#34; 生成等于(对象) &#34;。
以下是生成的Equals
:
public override bool Equals(object obj)
{
var account = obj as Account;
return account != null &&
EqualityComparer<List<Contact>>.Default.Equals(Contacts, account.Contacts) &&
// checking equality for other properties
}
当我尝试传递具有相同联系人列表(相同值)的帐户时,该方法返回false。
挖掘一下,我发现问题出在这一行:
EqualityComparer<List<Contact>>.Default.Equals(Contacts, account.Contacts)
因此,例如,如果我传递以下列表,则上述表达式将为false
。
var a = new List<Contact>(new Contact("Michael"), new Contact("John"));
var b = new List<Contact>(new Contact("Michael"), new Contact("John"));
这是可以理解的,因为这两个列表有不同的引用。我怎么能改变它以便检查列表中的值是否相等?
注意: Contact
会覆盖Equals
以检查值是否相等,因此检查两个不同new Contact("Michael")
实例的相等性会返回true
。< / p>
编辑:如果我不清楚,我希望列表中的项目无论其顺序如何都具有值相等。