假设您有一个Foo
类的集合:
class Foo
{
public string Bar;
public string Baz;
}
List<Foo> foolist;
您希望检查此集合以查看是否有另一个条目具有匹配的Bar
。
bool isDuplicate = false;
foreach (Foo f in foolist)
{
if (f.Bar == SomeBar)
{
isDuplicate = true;
break;
}
}
Contains()
不起作用,因为它将类作为一个整体进行比较。
有没有人有更好的方法来做这件事,为.NET 2.0工作?
9条答案
按热度按时间v1l68za41#
这不是LINQ,而是一个Lambda表达式,不过它使用了v3.5的特性。
这在2.0版中应该能用。
zf2sa74q2#
实作IEqualityComparer界面,并使用相符的Contains方法。
55ooxyrt3#
如果需要该元素,还可以使用List.Find()并传入一个委托,该委托为定义的“匹配”(http://msdn.microsoft.com/en-us/library/x0b5b5bc.aspx)返回true。
在MSDN文档中有一个如何定义委托的示例。
eni9jsuy4#
存在(item =〉item.Bar ==某个条)
或使用匿名委托
fooList.Exists(委托(Foo项){返回项.栏== SomeBar;})
1yjd4xko5#
如果您覆写Foo上的Equals以使Key位于Bar上,Contains()将会运作。
bvjveswy6#
如果类的'Bar是唯一的(类Foo的键),那么可以尝试实现一个System.Collections.ObjectModel.KeyedCollection。这非常简单:只需实现GetKeyForItem()方法。
iszxjhcz7#
如果可以使用LINQ,则可以执行以下操作:
iyfjxgzm8#
以下是检查集合是否没有重复项的4种方法:
jm81lzqq9#
您可能希望使用C5.HashSet,并为Foo实现Equals和GetHashCode()。