我的问题与在泛型类型中转换类有关。虽然我意识到将对象如 List<string>
转换为 List<object>
需要支持协变以防止将 object
对象添加到包含字符串的列表中,但我想知道为什么编译器不接受下面的转换,并且是否可以使用接口和协变或逆变来解决这个问题:
public class TypeA<T> {}
public class TypeB<T> {}
public class TypeC : TypeB<int> {}
class Program
{
public static void MyMethod<OutputType>(TypeA<TypeB<OutputType>> Parameter) {}
static void Main(string[] args)
{
TypeA<TypeC> Test = new TypeA<TypeC>();
MyMethod<int>(Test);
}
}
编译此代码会产生错误:
参数1:无法将“ConsoleApplication1.TypeA<ConsoleApplication1.TypeC>”转换为“ConsoleApplication1.TypeA<ConsoleApplication1.TypeB<int>>”。
尽管TypeC是TypeB<int>的直接后代。