c# – 将对象转换为IEnumerable
参见英文答案 >
VS debug issue,who can help me to explain this below?1个
以下是我遇到的问题的简化版本: var list = new List<int> {1,2,3,4,5}; // list Count = 5 System.Collections.Generic.List<int> var obj = list as object; // obj Count = 5 object {System.Collections.Generic.List<int>} var enumerable = obj as IEnumerable<object>; // enumerable null System.Collections.Generic.IEnumerable<object> 注释是Visual Studio 2017中监视窗口中的值 但是,如果我输入: obj as IEnumerable<object> 在观察窗口,我得到: obj as IEnumerable<object> Count = 5 System.Collections.Generic.IEnumerable<object> {System.Collections.Generic.List<int>} 那么为什么我可以在监视窗口中投射它并且它可以工作,但如果我在代码中执行它,它的计算结果为null? 解决方法
从
C# documentation:
这里有什么有用的知识是,以下两件事是非常不同的操作: var l = (object) new List<int>(); var i = (object) 42; 尽管语法看起来一样.第一行仅将列表视为另一种类型(有些检查转换是否实际可以工作),而第二行将整数转换为包含它的对象(装箱).还有第三个变体,它调用转换运算符,但看起来仍然相同.由于第一个变体可以随意改变对象并且只是以不同方式解释它,它比第二个变体便宜得多.我猜这个上下文中唯一可以用于接口协方差的选项. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |