C# 使用对象的属性而不是 List.Contains() 的引用

标签 c# list

我有这样的东西:

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,我发现这些方法都不起作用。实际上,如果我要覆盖字符串的 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/

相关文章:

c# - 在 JsonConvert.DeserializeObject 中反序列化对象时出现意外标记

java - Hibernate列表操作问题

sql - 使用 Esqueleto 处理列表类型

c# - 使用不带 URI 的 BitmapImage 的 XAML ImageBrush

c# - 如何让用户在 c# vsto excel 加载项中选择单元格(范围输入)?

c# - 比较两个对象的值而不列出每一列

c# - 委托(delegate)给私有(private)函数作为不同类中方法的参数

python - 如何将项目 append 到 Pandas 中不同列的列表

python数据框如何将集合列转换为列表

r - 如果字符串包含列表中的元素,则创建新的条件列