C# 创建要传递给采用基数 class 的函数的通用项列表

C# create list of generic items to pass to function that takes base class

我有一个以基数 class 作为参数的函数:

public List<Items> MyFunction(List<List<IBaseItemClass>> myList){}

然后我想创建一个列表来传递给这个函数。该列表将由派生自 classes 的对象组成,这些对象实现了 IBaseItemClass.

List<List<IBaseItemClass>> myList = new List<List<IBaseItemClass>>();

我已经有一些对象派生自 class,实现了 IBaseItemClass 和 returns 派生项目列表。

List<DerivedItem1> derivedItem1 = service.GetItem<DerivedItem1>(param1);
List<DerivedItem2> derivedItem2 = service.GetItem<DerivedItem2>(param1);

如何将 derivedItem1derivedItem1 分配给 myList

这不起作用:myList.Add(derivedItemList);

我的 objective 是将包含实现 IBaseItemClass 的对象的列表传递给 MyFunction 以便我可以以相同的方式处理它们,因为它们实现了相同的碱基 class.

myList 是对象列表的列表。但是您试图将单个对象传递给 myList.Add()。这就是它失败的原因。 您需要先创建单独的 List 对象,然后将它们添加到 myList。

由于 DerivedItem1 继承自 IBaseItemClass,但 myList.Add() 需要 IBaseItemClass 列表。

并且您为其提供了一个 DerivedItem1 列表,它无论如何都不会继承自 IBaseItemClass 列表。

这是一个解决方案,不是理想的解决方案,而是一种解决方法,尝试像这样添加,它应该有效:

myList.Add(derivedItemList.Select(item => item as IBaseItemClass).ToList());

或者简单地使用 IEnumerable 扩展方法 Cast,正如@juharr 在评论中所建议的那样:

myList.Add(derivedItemList.Cast<IBaseItemClass>().ToList());

只需将列表定义为 List<IBaseItemClass> 而不是 List<DerivedItem>。这样的列表持有 DerivedItem 的实例没有问题而且它会满足列表的列表。