实现接口B的接口D的列表无法识别为List <b>

时间:2019-03-07 09:11:00

标签: c#

我有一个接口ID,该ID是从另一个接口IB派生的。

public interface IB
{
    int Num { get; }
}

public interface ID : IB
{

}

假设我们有一个实现ID的类:

public class DImpl : ID
{
     public int Num { get; set; }
}

我知道我可以调用一个函数,该函数接收带有ID保留的变量的IB。

public void FuncOfIB(IB b)
{
     // do something
}

public static void Main()
{
     ID d = new DImpl();
     FuncOfIB(d); // Works
}

我想调用一个接收List<IB>作为参数的函数:

void ProcessListOfIB(List<IB> list)
{
   // Some code
}

但是似乎我无法使用List<ID>调用此函数。

public static void Main()
{
     List<ID> listID = new List<ID>();
     ProcessListOfIB(listID); // Doesn't work
}

有人知道为什么吗?我该如何解决?谢谢。

编辑:我需要功能ProcessListOfIB从列表中删除一个项目,因此复制不能解决我的问题...

3 个答案:

答案 0 :(得分:4)

您可以创建通用方法并将类型限制为IB:

void ProcessListOfIB<T>(List<T> list) where T:IB
{
    // Some code
}

答案 1 :(得分:1)

如果您只需要遍历集合(而不是修改它):

  Stream.of([1,2,3, 4])
    .sum()
    .filter(// here will be the sum, but i want the initial array and later the sum)
    .map(// here i want the filtered array and the calculated sum)

答案 2 :(得分:0)

列表没有标记为既不是协变也不是协变的(因为它不可能是,它不是接口),所以这就是为什么它不起作用的原因。