我正在尝试将一个Dictionary<int, List<T>>传递给一个需要IDictionary<int, IEnumerable<T>>的构造函数。
不幸的是,通用IDictionary没有被定义为IDictionary<TKey, out TValue>。也许这没有什么意义,但是有没有一个类型转换可以让我把字典传递给构造函数呢?
显而易见的强制转换((IDictionary<int, IEnumerable<T>>)dictionary)在运行时失败。
发布于 2013-01-29 11:21:38
不,因为那样不安全:
Dictionary<int, List<int>> mydictionary = whatever;
Dictionary<int, IEnumerable<int>> converted = (Dictionary<int, IEnumerable<int>>) mydictionary;
converted.Add(10, new int[] { 1, 2, 3 } );并且您刚刚向只能容纳列表的字典添加了一个数组。这是不允许的,因为没有办法保证它的安全性。
您注意到字典接口不是协变的;这正是它不能协变的原因。协变注释中的"out“是一个助记符,它告诉您”value参数仅用于输出“,但显然value参数用于输入到字典中。
https://stackoverflow.com/questions/14575018
复制相似问题