我剛剛遇到一個有趣的問題,涉及泛型和協方差,長話短說,花了30分鐘試圖聲明一個類型,直到我放棄。C#協方差難題,我遇到
爲了清楚起見:我已經有了一個解決方法,目前不需要我的項目幫助。我只是問這個問題,因爲我是一個反常複雜的泛型類型的粉絲。如果你也是,享受。
我試圖定義此方法來獲取全局IDictionary
,它通過它們的ID管理所有類型爲T
的對象。 (ID僅在相同類型的對象中是唯一的)。
IDictionary<int, T> getCache<T>() where T : BaseClass { }
爲了避免檢查T
爲BaseClass
每衍生物(其中有很多)我想定義字典的全局字典,查找正確的列表。
我想是這樣的:
Dictionary<Type, IDictionary<int, Baseclass>> allCaches;
泛型的Expierienced用戶可能會看到的問題,此履行情況:IDictionary<TKey, TValue>
接口是不是協變。
(不是協變的手段,IDictionary<int, DerivedClass>
不從IDictionary<int, BaseClass>
繼承。其結果是,前者的對象不能被放置在我的字典allCaches
)
我結束了,只是用我所有的緩存的IDictionary<int, BaseClass>
,並且當我讀取它們時手動將所存儲的元素轉回。
我想知道,任何人都可以想到我的方法getCache<T>()
使用最少的鑄造和不手動分支從BaseClass
派生的所有類型實現的?
我想你會需要依賴類型來做到這一點,而不是鑄造,所以沒有。 – Lee