为什么第二次转换失败
InvalidCastException: Unable to cast object of type 'System.Collections.Generic.List`1[System.Nullable`1[System.Boolean]]' to type 'System.Collections.Generic.IEnumerable`1[System.Object]'.
object list1 = new List<string>() { "a", "b" };
object list2 = new List<bool?>() { true, false };
IEnumerable<object> bind1 = (IEnumerable<object>)list1;
IEnumerable<object> bind2 = (IEnumerable<object>)list2;
任何想法都会受到赞赏。
答案 0 :(得分:6)
Nullable<T>
是一种值类型,而generic covariance不适用于值类型(因此,IEnumerable<int>
也不会转换为IEnumerable<object>
,例如:)< / p>
差异仅适用于参考类型;如果为变量类型参数指定值类型,则该类型参数对于生成的构造类型是不变的。
最简单的解决方法是使用Cast
:
IEnumerable<object> bind2 = list2.Cast<object>();
答案 1 :(得分:3)
请参阅Jon Skeet's answer了解原因,他会比我更好地解释它。
最简单的解决方法是使用Enumerable.Cast<T>()
扩展方法:
using System.Linq;
object list1 = new List<string>() { "a", "b" };
object list2 = new List<bool?>() { true, false };
IEnumerable<object> bind1 = list1.Cast<Object>();
IEnumerable<object> bind2 = list2.Cast<Object>();