LINQ 操作符与实现技术全解析
1. 类型转换操作
在编程过程中,有时需要将一种类型的查询转换为另一种类型。例如,可能会得到一个类型参数指定为某个基类型(如 object )的集合,但实际上该集合包含的是更具体类型(如 Course )的项。对于单个对象,可以使用 C# 的强制转换语法将引用转换为所需的类型,但对于 IEnumerable<T> 或 IQueryable<T> 类型,这种方法并不适用。
虽然协变允许 IEnumerable<Course> 隐式转换为 IEnumerable<object> ,但反过来,即使使用显式向下转换也无法实现。例如:
IEnumerable<object> sequence = Course.Catalog.Select(c => (object) c);
var courseSequence = (IEnumerable<Course>) sequence; // InvalidCastException
上述代码会抛出 InvalidCastException 异常,因为不能直接将 IEnumerable<object> 转换为 IEnumerable<Course> 。
超级会员免费看
订阅专栏 解锁全文

95

被折叠的 条评论
为什么被折叠?



