将Contains方法与自定义对象一起使用

时间:2014-11-11 21:21:47

标签: c#

如果我有这样的课程:

public class ContractSpecialtyInfo
{
    public string Sequence { get; set; }
    public string Specialty { get; set; }
    public string Taxonomy { get; set; }
}

然后在某个类中列出其对象的列表:

public List<ContractSpecialtyInfo> SpecialtyInfo { get; set; }

然后在程序的某个地方我检索这三个属性的一些值并从中创建一个对象,例如:ContractSpecialtyInfo item = new ContractSpecialtyInfo {... some values ...}

现在C#能够告诉我类似的答案:

if(SpecialtyInfo.Contains(item)) 

还是我需要帮助他?怎么样? 基本上我问如果自定义对象,列表上的Contain方法是否正常工作?或者它只适用于简单的数据类型,如stringint等...如果它不起作用那么我该怎么做以及如何做?

2 个答案:

答案 0 :(得分:3)

它将通过引用比较项目。因此只有当项目具有相同的引用时它才会起作用。如果您想根据属性值比较您的项目,您应该在班级中实施IEquatable<T>

答案 1 :(得分:3)

您必须覆盖Equals或实施IEquatable<ContractSpecialtyInfo>才能使Contains不仅比较参考。或者使用Any并指定您希望如何比较它们:

bool contains = SpecialtyInfo
   .Any(s => s.Sequence  == item.Sequence 
          && s.Specialty == item.Specialty 
          && s.Taxonomy  == item.Taxonomy);