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);
如何将 derivedItem1
和 derivedItem1
分配给 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 的实例没有问题而且它会满足列表的列表。
我有一个以基数 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);
如何将 derivedItem1
和 derivedItem1
分配给 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 的实例没有问题而且它会满足列表的列表。