【发布时间】:2019-06-14 07:33:53
【问题描述】:
public class Flea : Animals {...}
var fleas = new Dictionary<int, Flea>();
public IReadOnlyDictionary<string, Animal> Animals => fleas.ToDictionary(pair => pair.Key, pair => (Animal)pair.Value);
Q有没有更高效的方法从fleas获取Animals?
【问题讨论】:
-
一个更大的问题是:你为什么要这样做呢?如果您需要这样做,那么您的应用程序结构可能有问题?
-
如您所见,您无法投射它。虽然 Flea 继承自 Animals,但基于它们的泛型类不会相互继承。您也许可以将
fleas定义为Dictionay<int, Animals>。然后你可以把跳蚤放进去,你就不需要转换了。 -
你打算如何使用那本词典? This possibly duplicate question 解释了为什么不能将字典分配给 IDictionary
以及如何 通过委托或简单包装器将项目用作动物 -
This question 解释了为什么与
IDictionary的协方差不安全以及为什么IReadOnlyDictionary<TKey, TValue>也不协变
标签: c# generics casting covariance contravariance