在C#中,当object
变量(恰好包含整数数组)作为IEnumerable<object>
时,我得到了一些奇怪的结果。
object arr = new[] {1, 2, 3};
var tst1 = arr as IEnumerable<int>;
var tst2 = arr as IEnumerable<object>;
当这个运行时,第一个演员成功,但第二个演员失败。但是,如果我在Visual Studio中调试此代码并在立即窗口或监视窗格中评估arr as IEnumerable<object>
,则转换成功。所以我有几个问题:
1)为什么演员表无效?
2)为什么调试器能够执行强制转换?
奖励积分:
- T[]
真的实现了IEnumerable<T>
吗? int
真的是object
吗?
- 当转换为具有协变泛型参数的类型时,哪些类型对实例有效?