0

IEnumerableクラスがその階層のある段階でインターフェイスを実装する場合、コレクションを作成してそのクラスにデータを入力することは可能ですか?

IList<>ICollection<>IEnumerable<>などを実装するオブジェクトを取るか、 Array(すべてある段階で実装するIEnumerable)である場合、値のコレクションを入力できる単純な関数を書きたいと思っています。

List<object>したがって、この関数はorを受け取るかどうかはわかりませんが、object[]両方を入力することができます。

ありがとう。

4

1 に答える 1

0

IEnumerableインターフェイスは、オブジェクトの項目を列挙する列挙子を提供するメソッドのみを指定します。そのため、オブジェクトの他の能力が何であるかについての情報はありません。そのため、アイテムの量が固定されているのか、可変なのか、外部から可変なのかさえわかりません。

これを提供する最初のインターフェイスは、ランダム アクセスに加えて、オブジェクトを追加するメソッドを提供するIListです。IList は読み取り専用である可能性があるため、IList を持っているからといって、それに書き込みアクセスできるわけではありません。辞書のようなオブジェクトの add メソッドを指定するIDictionaryもあります。他のすべての標準コレクションは、通常、この機能を提供するインターフェイスを実装していません。

したがって、その実装、または少なくともより具体的な実装の詳細 (IList または IDictionary) を知らずに、任意のコレクションに値を入力することはできません。

すべての機能をキャッチする必要はありません。ほとんどのインスタンスをカバーするものが必要なだけです。したがって、IEnumerable、ICollection、または IList が渡された場合は、リストを返すことができます。

IList<T>またはのいずれかを取得する場合ICollection<T>IEnumerable<T>(両方がそれを実装しているため) も取得するため、1 つのケースしかありません。IEnumerable を受け入れて、それに基づいてリストを作成するだけです。

public IList<T> CreateList<T> (IEnumerable<T> enumerable)
{
    List<T> list = new List<T>(enumerable);

    // add custom items
    list.Add(GetCustomItem<T>());

    return list;
}

<T>必要に応じて、定義からすべての を削除するだけで、非ジェネリックなバージョンを作成することもできます。

于 2013-01-28T10:26:57.500 に答える