我刚刚遇到一个有趣的问题,涉及泛型和协方差,长话短说,花了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