我有类似的东西:

public class MyClass
{
  public string Type { get; set; }
  public int Value { get; set; }
}

然后我有:
List<MyClass> myList = new List<MyClass>()

// ... Populate myList

if (myList.Contains("testType"))
{
  // Do something
}

在上面的代码中,我希望myList.Contains()在Type属性而不是MyClass对象引用上匹配。我该如何实现?我是使用IComparable还是ICompare接口(interface),是否覆盖MyClass.Equals(),还是足以覆盖MyClass的字符串转换?

编辑:在使用覆盖Equals()MyClass的字符串强制转换进行了一些测试之后,实现了ICompareIComparable,我发现这些方法都不起作用。实际上,如果我要覆盖string的MyClass强制转换(例如myList.Contains((MyClass)"testType")),那似乎可行。但是我认为我更喜欢The Scrum Meister的答案:)

最佳答案

您可以使用 Any 扩展方法:

if (myList.Any(x => x.Type == "testType"))
{
  // Do something
}

关于C#使用对象的属性,而不是List.Contains()的引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6542860/

10-12 06:31
查看更多