首页 > 解决方案 > 获得无效的差异:类型参数必须是通用接口的不变有效错误

问题描述

我有一个通用接口,我想支持将类型转换为基类。因此,我添加了“out”参数来支持协方差。我还添加了“in”泛型参数,因为相同的参数被用作函数内部的参数。接口如下所示:

internal interface IA<in L1, in R1, out L2, out R2> where L1 : IX where R1 : IX where L2 : IX where R2 : IX
{

    ICollection<IY<L2, R2>> Method(IReadOnlyCollection<L1> left, IReadOnlyCollection<R1> right);
}

这里 IA,IX,IY 都是接口。对于“ICollection<IY<L2, R2>>”,我收到以下错误:

Invalid variance: The type parameter 'L2' must be invariantly valid on 'IA<L1, R1, L2,R2>.Method(IReadOnlyCollection<L1> left, IReadOnlyCollection<R1> right)'. 'L2' is covariant.

在接口 IY 中,我还定义了基本类型 IX 的 L1 和 R1“out”泛型参数。但这也没有解决这个问题。那么,我做错了什么?

标签: c#genericscovariance

解决方案


推荐阅读