generics类的协方差

在C#中有什么方法可以实现以下目的:

class MyClass where T : BaseTypeInner {} class BaseTypeInner {} class A : BaseTypeInner {} class B : BaseTypeInner {} void Main() { MyClass variant; variant = new MyClass (); // ERROR: Cannot implicitly convert type 'UserQuery.MyClass' to 'UserQuery.MyClass' variant = new MyClass (); } 

一种可能的解决方案是为基本generics类型提供基类型:

 class BaseType {} class MyClass : BaseType where T : BaseTypeInner {} class BaseTypeInner {} class A : BaseTypeInner {} class B : BaseTypeInner {} void Main() { BaseType variant; variant = new MyClass (); variant = new MyClass (); } 

但是,这不是一个好主意,因为我使用的是较低的类,这不是通用的,所以我失去了使用类型参数得到的所有细节和限制。

不,但是可以提供自定义CastUp / CastDown方法来实现此目的。 ImmutableArray是.NET BCL的一部分。