17

私のコードには、すでに IEnumerable から派生しているクラスがあります。そのインスタンスで「Contains」メソッドを使用して、そのリスト内の何かを探す方法があるかどうか疑問に思っていましたか?

4

3 に答える 3

25

非ジェネリックまたはジェネリックを本当に実装していますか? 汎用のものを実装できる可能性がある場合は、実際に拡張メソッドを持つLINQ to Objectsを使用できるため、人生はずっと簡単になります。IEnumerableIEnumerable<T>Contains

そうしないと、Castorを使用して非ジェネリックからジェネリックに変換できる可能性があります。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 に答える