2

为什么第二次转换失败

InvalidCastException:无法将“System.Collections.Generic.List`1[System.Nullable`1[System.Boolean]]”类型的对象转换为“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;

任何想法,将不胜感激。

4

2 回答 2

6

Nullable<T>是一个值类型,通用协方差不适用于值类型(例如,没有从IEnumerable<int>到的转换IEnumerable<object>):

差异仅适用于引用类型;如果为变体类型参数指定值类型,则该类型参数对于生成的构造类型是不变的。

最简单的解决方法是使用Cast

IEnumerable<object> bind2 = list2.Cast<object>();
于 2013-07-10T15:39:14.197 回答
3

原因请参阅Jon Skeet 的回答,他会比我更好地解释它。

最简单的解决方法是使用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>();
于 2013-07-10T15:39:24.320 回答