Compile error when assigning IQueryable<int> to IQueryable<object>
为什么编译器不允许给对象赋值?
1 2 3
| IQueryable<object> objects = null;
IQueryable<int> ints = null;
objects = ints; |
- 您可以在分配之前将其强制转换为IQueryable(或)强制转换为IQueryable。
- 你的项目的目标框架是什么?它是.NET Framework 3.5还是更高版本?
- @Elgonzo,我使用.NET框架4.5.1
- 这是一个副本,但对于处理该问题的实际答案,因为您可以将int赋给对象,所以如果您实际需要这样一个可查询的对象,objects = ints.Cast将起作用。
隐式类型转换(协方差函数)不适用于所有泛型。somegeneric不是从派生到somegeneric的,因此,即使类型参数已经有隐式转换(在本例中是装箱),也无法对其进行强制转换。
如果您使用的是C 4.0,那么可以使用isomegeneric将通用接口定义为协变接口,前提是这些通用参数是彼此派生的,那么您可以强制转换。如果泛型参数不是派生的,则不可能强制转换。
- 根据文献记载,iquerable的类型参数是协变的(即IQueryable)。隐马尔可夫模型。。。
- 也许OP目标.NET 3.5或更高版本?
- 检查我刚做的编辑。一般协方差要求类型参数是彼此的导数。在op的问题中,int不从对象继承,因此不应该是可转换的。
- 啊,你说得对……
- INT32确实继承了对象,就实际的类型层次结构而言(这就是为什么你可以将它们封装起来),但是值类型不能参与协方差(因为你不能有装箱的int类型的参数,至少在任何东西,而不是C++/CLI)。
- 谢谢,@random832,你说得对。