gpt4 book ai didi

c# - 分配 IEnumerable(协方差)

转载 作者:太空狗 更新时间:2023-10-29 20:05:28 25 4
gpt4 key购买 nike

IEnumerable在 C# 4.0 中有一个协变参数,我很困惑它在以下代码中的行为方式。

public class Test
{
IEnumerable<IFoo> foos;

public void DoTestOne<H>(IEnumerable<H> bars) where H : IFoo
{
foos = bars;
}

public void DoTestTwo(IEnumerable<IBar> bars)
{
foos = bars;
}
}
public interface IFoo
{
}
public interface IBar : IFoo
{
}

所以基本上是 DoTestOne DoTestTwo 时方法无法编译做。除了为什么它不起作用,如果有人知道我如何实现 DoTestOne 的效果(将 IEnumberable<H> where H : IFoo 分配给 IEnumberable<IFoo> )我将不胜感激。

最佳答案

如果你知道 H 将是一个类,这确实有效:

    public void DoTestOne<H>(IEnumerable<H> bars) where H : class, IFoo
{
foos = bars;
}

这里的问题是,如果 H 是值类型,协方差并不完全符合您的预期,如 IEnumerable<MyStruct>实际上返回值类型,而 IEnumerable<IFoo>必须返回盒装实例。您可以使用明确的 Cast<IFoo>必要时解决这个问题。

关于c# - 分配 IEnumerable(协方差),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12962388/

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