簡體   English   中英

比較兩個相同類型的對象列表

[英]Compare two lists of objects of the same type

這是定義自定義對象的方式:

public class AccountDomain
{
    public string MAILDOMAIN { get; set; }
    public string ORG_NAME { get; set; }
}

這就是我填充對象列表的方式:

    List<AccountDomain> mainDBAccountDomain = mainDB.GetAllAccountsAndDomains();
    List<AccountDomain> manageEngineAccountDomain = ManageEngine.GetAllAccountsAndDomains();

這段代碼運行良好-如果我查看本地窗口,則可以在mainDBAccountDomain和manageEngineAccountDomain中看到一個對象列表。

我正在努力下一點,理想情況下,我想要一個AccountDomain類型的新列表,其中包含mainDBAccountDomain中的所有條目,而不是 ManageEngineAccountDomain

任何幫助都將不勝感激,即使它只是朝着正確方向的指針!

我想要一個AccountDomain類型的新列表,其中包含mainDBAccountDomain中的所有條目,而不是 ManageEngineAccountDomain中的所有條目

使用linq來處理對象非常簡單,這正是Enumerable.Except函數的作用:

var result = mainDBAccountDomain.Except(manageEngineAccountDomain).ToList();

如果您需要與引用相等不同的其他功能,則可以將比較器傳遞給Except函數,或者可以在AccountDomain實現EqualsGetHashCode (並可以選擇在這些之上實現IEquatable<AccountDomain> )。

這說明如果您需要了解comparers更多的細節。

這是一個例子:

public class AccountDomainEqualityComparer : IEqualityComparer<AccountDomain>
{
    public static readonly AccountDomainEqualityComparer Instance
        = new AccountDomainEqualityComparer();

    private AccountDomainEqualityComparer()
    {
    }

    public bool Equals(AccountDomain x, AccountDomain y)
    {
        if (ReferenceEquals(x, y))
            return true;

        if (x == null || y == null)
            return false;

        return x.MAILDOMAIN == y.MAILDOMAIN
            && x.ORG_NAME == y.ORG_NAME;
    }

    public int GetHashCode(AccountDomain obj)
    {
        if (obj == null)
            return 0;

        return (obj.MAILDOMAIN ?? string.Empty).GetHashCode()
            ^ (397 * (obj.ORG_NAME ?? string.Empty).GetHashCode());
    }
}

然后,您可以像這樣使用它:

var result = mainDBAccountDomain.Except(manageEngineAccountDomain, 
                                        AccountDomainEqualityComparer.Instance)
                                .ToList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM