J C*_*per 3 .net c# generics collections casting
我想知道为什么我不能只是演员(我有一个模糊的想法,这可能与那个共同/逆转的东西有关?),我被迫将第一个字典的元素复制到新的字典中得到我想要的类型?
Jam*_*are 10
你不能这样做,因为它们不是同一类型.考虑:
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];
Run Code Online (Sandbox Code Playgroud)
这有意义吗?由于Dictionary<string, List<int>>
该说TValue
就是List<int>
这意味着你可以Add()
一个List<int>
一个的值.如果你能施放此为Dictionary<string, IEnumerable<int>>
这将意味着值类型是IEnumerable<int>
这将意味着你可以Add()
任意 IEnumerable<int>
(int[]
,HashSet<int>
,等),这将违背原来的类型.
因此,a List<T>
可以转换为IEnumerable<T>
引用,因为List<T>
实现IEnumerable<T>
,但这并不意味着Dictionary<TKey, List<TValue>>
实现/扩展Dictionary<TKey, IEnumerable<TValue>>
.
更简单地说:
Dictionary<int, Dog>
Run Code Online (Sandbox Code Playgroud)
无法转换为
Dictionary<int, Animal>
Run Code Online (Sandbox Code Playgroud)
因为后者会允许你添加Cat,Squirrel等.
归档时间: |
|
查看次数: |
381 次 |
最近记录: |