如何使用EqualityComparer检查两个列表项是否具有值相等?

时间:2017-09-11 15:06:38

标签: c# list equals

我有一个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>

编辑:如果我不清楚,我希望列表中的项目无论其顺序如何都具有值相等。

0 个答案:

没有答案