Вы не можете сделать это, потому что они не одного типа. Рассмотрим:
var x = new Dictionary<string, List<int>>();
// won't compile, but assume it could...
Dictionary<string, IEnumerable<int>> xPrime = x;
// uh oh, would allow us to legally add array of int!
xPrime["Hi"] = new int[13];
Имеет ли это смысл? Потому что Dictionary<string, List<int>>
говорит, что TValue
равно List<int>
, что означает, что вы можете Add()
a List<int>
в качестве значения. Если бы вы могли привести это значение к Dictionary<string, IEnumerable<int>>
, это означало бы, что тип значения равен IEnumerable<int>
, что означает, что вы могли бы Add()
любой IEnumerable<int>
(int[]
, HashSet<int>
и т. Д.), Которые нарушают исходный тип.
Таким образом, List<T>
можно преобразовать в ссылку IEnumerable<T>
, поскольку List<T>
реализует IEnumerable<T>
, но это не означает, что Dictionary<TKey, List<TValue>>
реализует / расширяет Dictionary<TKey, IEnumerable<TValue>>
.
Проще говоря:
Dictionary<int, Dog>
Невозможно преобразовать в
Dictionary<int, Animal>
Потому что последний позволит вам добавить Кошку, Белку и т. Д.