将IQueryable <int>分配给IQueryable <object>时编译错误

时间:2015-06-20 12:28:33

标签: c# covariance

为什么编译器不允许为对象分配int?

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

1 个答案:

答案 0 :(得分:1)

隐式类型转换(协方差函数)不适用于所有泛型。 SomeGeneric&lt; ValueType&gt; 不是从 SomeGeneric&lt; Reference&gt; 派生的,因此,即使已经存在类型参数的隐式转换,也无法对其进行转换(在这种情况下,拳击)。

如果您使用的是C#4.0,可以使用 ISomeGeneric&lt; out T&gt; 将通用接口定义为协变,并且假设通用参数彼此派生,然后你可以施展。如果未派生泛型参数,则无法强制转换。