2015-06-20 90 views
2

为什么编译器不允许将int分配给对象?为IQueryable分配IQueryable <int>时编译出错<object>

IQueryable<object> objects = null; 
IQueryable<int> ints = null; 
objects = ints; 
+0

您可以将其转换为'IQueryable '(OR)在分配前将其转换为'IQueryable '。 – Rahul

+0

你的项目的目标框架是什么?是否有.NET Framework 3.5或更高版本? – elgonzo

+0

@elgonzo,我使用.Net框架4.5.1 – Albert

回答

1

隐式类型转换(协方差函数)不适用于所有泛型。 SomeGeneric <的ValueType >不从到SomeGeneric <参考>获得,因此,即使有一个已经为类型参数的隐式转换(在此情况下,拳击)它是无效的投放。

如果你在C#4.0,通用接口可以使用ISomeGeneric <定义为协变出Ť>和提供的通用参数是衍生彼此,然后就可以铸造。如果泛型参数不是派生的,则不可能投射。

+1

那么,IQuerable 的类型参数是协变的(即'IQueryable ')根据其[文档](http://msdn.microsoft.com/en-us/library/bb351562.aspx)... hmm ... – elgonzo

+0

也许OP的目标是.NET 3.5或更高版本? – elgonzo

+1

检查我刚刚做的编辑。通用协方差确实需要类型参数是彼此的派生。在OP的问题中,Int不从Object继承,因此不应该是可转换的。 –