C#检查List是否包含具有相同值的自定义对象

时间:2016-01-14 13:57:46

标签: c#

我有一个自定义对象(属性必须是字符串):

public class Nemesis
{
    public String Dex_ID;
    public String Value;
}

我有一个特定的函数,它创建该对象的新实例,向它们添加值,然后将它们添加到此List:

private List<Nemesis> _nemesisList;
public List<Nemesis> NemesisList
{
    get { return _nemesisList; }
    set { _nemesisList = value; }
}

通常情况下,我会用它来检查现有的东西:

if (!NemesisList.Contains(nemesis))
{
    NemesisList.Add(nemesis);
}

但是这一次我想检查我的List是否已经包含 nemesis 并且具有相同的 nemesis.Dex_ID 。我该怎么做?

4 个答案:

答案 0 :(得分:9)

如果您只想检查ID字段并忽略其他字段,则可以执行以下操作:

if(!NemesisList.Any(n=> n.Dex_ID == nemesis.Dex_ID))

否则,如果您要对所有字段执行比较,则可以覆盖EqualsGetHashCode

请参阅:Correct way to override Equals() and GetHashCode()

答案 1 :(得分:0)

Linq是你的朋友:

if (!myList.Any(x => x.Dex_ID == nemesis.Dex_ID)) myList.Add(nemesis)

答案 2 :(得分:0)

尝试使用以下LINQ:

var exists = NemesisList.Any(n=>n.Dex_Id==id)

答案 3 :(得分:0)

使用LINQ:

if (!NemesisList.Any(n => n.Dex_ID == nemesis.Dex_ID)) // ...

OR

if (!NemesisList.Select(n => n.Dex_ID).Contains(nemesis.Dex_ID)) // ...

更好的解决方案可能是创建一个字典。它们是为基于某些键值的快速查找而构建的。

if (!NemesisDict.ContainsKey(nemesis.Dex_ID)) // ...