一个C#代码片段。
var isTrue = (new List<int>{1,2,3} is IEnumerable<object>);
我在代码执行中得到了结果false
,
但当我将该代码复制到WATCH窗口中时,结果是true
。
object[] oo = new int[] {1, 2, 3}; //will fail
IEnumerable<object> oo = new int[] {1, 2, 3}; //will fail
new List<int> { 1, 2, 3 }
是 IEnumerable<object>
应该像运行时一样返回 false
。为什么它返回 true
?因为有一个 bug,就这样。int[]
隐式转换为 IEnumerable<int>
与 List<int>
相同时,new int[] { 1, 2, 3 }
是 IEnumerable<object>
将会正确地返回 false
。false
,因此编译器分析数组情况的方式不同于任何其他的 IEnumerable
。
IEnumable
是一个打字错误? - casiosmunew List<int>{1,2,3} as IEnumerable<object>
也可以工作 o_O - Manfred Radlwimmer