我有这样的东西:
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
的字符串转换进行一些测试后,实现 ICompare
和 IComparable
,我发现这些方法都不起作用。实际上,如果我要覆盖字符串的 MyClass
转换,似乎会起作用,例如 myList.Contains((MyClass)"testType")
。但是我认为我更喜欢 Scrum Meister 的回答 :)
最佳答案
您可以使用 Any
扩展方法:
if (myList.Any(x => x.Type == "testType"))
{
// Do something
}
关于C# 使用对象的属性而不是 List.Contains() 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6542860/