17

我的代码中有一个类已经派生自 IEnumerable。我想知道是否有一种方法可以在其实例上使用“包含”方法来查找该列表中的内容?

4

3 回答 3

25

真的实现了 non-genericIEnumerable还是 generic IEnumerable<T>?如果您可以实现通用的,您的生活将变得更加简单 - 因为您可以使用LINQ to Objects,它确实有一个Contains扩展方法。

Cast否则,您可能会使用or将非泛型转换为泛型OfType,例如

bool found = nonGeneric.Cast<TargetType>().Contains(targetItem);

如果您只是实现了通用接口开始,那就更好了:)

于 2012-12-07T16:42:51.030 回答
24

IEnumerable<T>不,界面中没有这样的方法。有一个extension method你可以使用的。

using System.Linq;

进而:

IEnumerable<string> foos = new[] { "foo", "bar", "baz" };
bool IsThereABar = foos.Contains("bar");
于 2012-12-07T16:42:30.633 回答
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 扩展方法包含

于 2017-04-18T10:53:34.947 回答