作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个网络应用程序,其中对象通过 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/
COW 不是奶牛,是 Copy-On-Write 的缩写,这是一种是复制但也不完全是复制的技术。 一般来说复制就是创建出完全相同的两份,两份是独立的: 但是,有的时候复制这件事没多大必要
我是一名优秀的程序员,十分优秀!