1

Add メソッドと共変型パラメーターを持つコレクションが必要です。

T の IEnumerable は、共変型パラメーターをカバーします

public interface IEnumerable<out T> : IEnumerable

ただし、Add メソッドはありません。

T の IList には共変型パラメーターはありませんが、Add メソッドがあります。

これをカバーするコレクションや作成方法を知っている人はいますか?

4

2 に答える 2

3

IEnumerable<out T>「この型の値は、がまたは親でIEnumerable<X>ある任意の型の変数に割り当てることができる」ことを意味します。XTT

のようなものがあればIList<out T>、次のことができることを意味します。

IList<string> strings = new List<string>();
IList<object> objects = strings; 
objects.Add(new object());

明らかに、これはタイプ セーフではないため、そのようなインターフェイスは存在できません。

于 2013-03-14T22:22:18.420 に答える
0

の任意の型を受け入れることができるコレクションが、任意の型の を受け入れることができることを意味するため、型 を受け取るanメソッドに関して共変種であり、そのメソッドを含むインターフェイスを持つことはできません。型のパラメーターを取るメソッドでContraバリアント インターフェイスを定義することもできます(私は「追加」よりも「フィード」を好みます。後者の用語は算術演算を指すこともあり、オブジェクトを受け入れることができるオブジェクトが存在するためです)。それらで何かを行うことは、それらのオブジェクトがある種のコレクションに追加されていることを意味するものではありません; たとえば、 と を取るフィルタリング クラスを簡単に持つことができます。TAddTDogAnimalIFeedable<in T>FeedTIFeedable<T>Predicate<T>与えられたIFeedable<T>すべてのものを取得して実装し、述語関数を呼び出し、述語が true を返した場合にのみ、指定された にアイテムを渡しました。このようなメソッドに与えられたデータは、必ずしもどのような種類のコレクションにも「追加」されるとは限りませんが、それでもインターフェイスを実装するオブジェクトに「供給」されます。TIFeedable<T>

于 2013-03-14T23:12:43.853 に答える