我有一个接口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
从列表中删除一个项目,因此复制不能解决我的问题...
答案 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)
列表没有标记为既不是协变也不是协变的(因为它不可能是,它不是接口),所以这就是为什么它不起作用的原因。