我需要一個具有Add方法和covariant類型參數的集合。有沒有辦法創建一個具有Add方法但還具有協變類型參數的集合?
的T IEnumerable的覆蓋協變類型參數
public interface IEnumerable<out T> : IEnumerable
但它沒有Add方法。
T的IList沒有協變類型參數,但具有Add方法。
有沒有人知道會涵蓋這個或如何製作一個集合?
我需要一個具有Add方法和covariant類型參數的集合。有沒有辦法創建一個具有Add方法但還具有協變類型參數的集合?
的T IEnumerable的覆蓋協變類型參數
public interface IEnumerable<out T> : IEnumerable
但它沒有Add方法。
T的IList沒有協變類型參數,但具有Add方法。
有沒有人知道會涵蓋這個或如何製作一個集合?
IEnumerable<out T>
意味着「這種類型的值可以被分配到任何類型IEnumerable<X>
其中X
是T
或T
父母的變量」
如果你有這樣的事情IList<out T>
,這將意味着你可以做以下:
IList<string> strings = new List<string>();
IList<object> objects = strings;
objects.Add(new object());
顯然這不是類型安全的,這就是爲什麼不存在這樣的接口。
人們不能有一個接口,其是一個共變體相對於T
並且包括一個Add
方法,該方法採用類型T
,因爲一個會暗示這是能夠接受的Dog
任何類型的集合是能夠接受任何類型的Animal
。我們可以定義一個變體接口IFeedable<in T>
與Feed
方法,它採用了T
類型的參數(我更喜歡「feed」爲「add」,因爲後一項也可以指算術運算,並且由於存在可以接受對象並對它們做某事的對象並不意味着這些對象正在被添加到某種集合中;例如,可以很容易地擁有一個過濾類,它需要一個IFeedable<T>
和一個Predicate<T>
並實現IFeedable<T>
,每個對象都需要一個T
它被賦予了,稱爲謂詞函數,並且只有當謂詞返回true時纔將該項傳遞給提供的IFeedable<T>
。賦予這種方法的數據不一定會被「添加」到任何類型的集合中,而是會被「饋送」 「to他反對實現界面。