我正在编写一个网络应用程序,其中id请求对象,并通过委托回调返回:
public static void requestById<ModelType>(T id, Action<ModelType> callback)
where ModelType : AbstractModel<T>
{
}
为方便起见,我有一种方法可以一次请求多个对象:
public static void requestByIds<ModelType>
(List<T> ids, Action<List<ModelType>> callback)
where ModelType : AbstractModel<T>, new()
{
}
接下来我有一个有多个孩子的抽象模型对象,以及一个请求孩子的方法:
public abstract void requestSections(Action<List<AbstractSection>> callback);
然后是具体类中的实现:
public override void requestSections(Action<List<AbstractSection>> callback)
{
Section.requestByIds<Section>(this.sectionIds, callback);
}
突然间,我找到了代表
Action<List<AbstractSection>>
与
不兼容Action<List<Section>>
这是C#中逆变的限制吗?有没有任何解决方法,所以我可以让我的覆盖方法工作?感谢
答案 0 :(得分:5)
List
是不变的,它不是协变的或逆变的。
如果您使用的是IEnumerable<T>
而不是列表,那么您可以依赖IEnumerable<T>
与T
的重新协调,这会导致Action<IEnumerable<T>>
逆变{ {1}}。