我的代码中有一个类已经从IEnumerable派生了。 我想知道是否有一种方法可以在其instnaces上使用“Contains”方法来查找该列表中的某些内容?
答案 0 :(得分:19)
您真的实施非通用IEnumerable
还是通用IEnumerable<T>
?如果你可以实现通用的那个,那么你的生活将变得更加简单 - 因为你可以使用LINQ to Objects,它确实有Contains
扩展方法。
否则,您可以使用Cast
或OfType
将非通用转换为通用,例如
bool found = nonGeneric.Cast<TargetType>().Contains(targetItem);
如果你刚刚开始实现通用接口,那将会更好:)
答案 1 :(得分:18)
不,IEnumerable<T>
界面中没有这样的方法。虽然你可以使用extension method
。
using System.Linq;
然后:
IEnumerable<string> foos = new[] { "foo", "bar", "baz" };
bool IsThereABar = foos.Contains("bar");
答案 2 :(得分:1)
public static bool Contains<T>(this IEnumerable source, T value)
{
foreach (var i in source)
{
if (Equals(i, value))
return true;
}
return false;
}
如果需要,可以添加自定义比较器作为参数ti扩展方法包含