Mat*_*zer 19 .net c# casting c#-6.0 .net-4.6
请参阅以下代码段:
(IEnumerable<object>)new Dictionary<string, string>()
Run Code Online (Sandbox Code Playgroud)
上面的强制转换将抛出无效的强制转换异常.
实际上,IDictionary<TKey, TValue>
也间接实现IEnumerable<out T>
,因为它也实现了ICollection<T>
.也就是说,整个演员应该是有效的.
事实上,对我来说更奇怪的是,如果我在调试器手表插槽上运行整个演员,它就可以了!
这是怎么回事?
Pat*_*man 24
那本字典确实实现了IEnumerable<KeyValuePair<TKey, TValue>>
和IEnumerable
,而是IEnumerable
一个结构是不一样IEnumerable
的一个对象.方差仅适用于参考类型.
这确实在我的最终工作,应该是合乎逻辑的选择:
var x = (IEnumerable)new Dictionary<string, string>();
Run Code Online (Sandbox Code Playgroud)
作为一个示例,这确实有效:
List<string> l = new List<string>();
var x = (IEnumerable<object>)l;
Run Code Online (Sandbox Code Playgroud)
但是这个没有:
List<DateTime> l2 = new List<DateTime>();
var x = (IEnumerable<object>)l2;
Run Code Online (Sandbox Code Playgroud)
清楚地表明结构是问题.
(为什么它在你的Watch窗口中工作,我不知道)
归档时间: |
|
查看次数: |
889 次 |
最近记录: |