gpt4 book ai didi

c# - Action> 逆变限制

转载 作者:行者123 更新时间:2023-12-02 21:40:24 25 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>T 协变,这使得 Action<IEnumerable<T>>相对于 T 逆变.

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

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