我明白我写的代码是错误的,所以不要发表我的代码错误的评论。我知道。
像
这样的东西ObjectResult<int?> obj = new ObjectResult<int?> as IEnumerable
我无法实例化ObjcetResult,因为它是受保护的类。我无法更改访问修饰符。
答案 0 :(得分:3)
首先,回答你的问题:
您无法直接将ObjectResult<int?>
转换为IEnumerable<int>
。虽然IEnumerable<T>
是协变的,但int?
和int
之间没有继承关系。
也就是说,您可以将其直接投射到IEnumerable<int?>
:
(IEnumerable<int?>)objResult
如果您想要IEnumerable<int>
,可以执行以下操作:
var result = objResult.Where(x => x.HasValue).Select(x => x.Value);
其次,ObjectResult
不是“受保护”类,而是abstract
类。 ObjectResult<T>
是sealed
类。 abstract
和sealed
都不是访问修饰符。