【发布时间】:2018-09-10 15:27:29
【问题描述】:
所以我试图稍微重构一下我的代码,我需要一个方法来检查数组是否为空,然后是否不将该数组中的项目添加到列表中。我需要将许多从同一类继承的不同项目添加到该类的列表中。
我写了这个方法:
private void AddItems<T>(T[] items) where T : SomeClass
{
if (items != null)
{
someList.AddRange(items);
}
}
这很好用,但是我的问题是为什么会这样:
private void AddItems<T>(IEnumerable<T> items) where T : SomeClass
{
if (items != null)
{
someList.AddRange(items);
}
}
不工作?
后一个示例产生此错误:“参数 1:无法从
System.Collections.Generic.IEnumerable<T>转换为System.Collections.Generic.IEnumerable<SomeClass>”
List<SomeClass> someList = new List<SomeClass>();
【问题讨论】:
-
请分享
someList的定义。还有不工作是什么意思?编译错误?如果是,请提供哪个 -
这看起来很奇怪,因为the method declaration 是
List<T>.AddRange(IEnumerable<T>)。它以什么方式“不起作用”? -
请定义“不工作”。你有错误吗?什么错误?
-
取决于您使用的 .Net 版本。较旧的不支持
IEnumerable<T>。虽然 6 可以。 -
为什么不用
IEnumerable<SomeClass> items作为参数?
标签: c# list generics ienumerable