gpt4 book ai didi

c# - Action> 逆变限制

转载 作者:行者123 更新时间:2023-12-02 04:42:27 24 4
gpt4 key购买 nike

我正在编写一个网络应用程序,其中对象由 id 请求并通过委托(delegate)回调返回:

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# 中逆变的限制吗?有什么变通办法可以让我的覆盖方法起作用吗?谢谢

最佳答案

List是不变的,它既不是协变的也不是逆变的。

如果您使用 IEnumerable<T>而不是列表,而不是您可以依赖的 IEnumerable<T>与 repsect 协变 T ,这使得 Action<IEnumerable<T>>关于 T 的逆变.

关于c# - Action<List<Something>> 逆变限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20551150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com