List.AddRange()
exists, but IList.AddRange()
doesn't.
This strikes me as odd. What's the reason behind this?
问问题
25391 次
2 回答
71
因为界面应该易于实现并且不包含“除了厨房之外的所有内容”。如果添加AddRange
,则应添加InsertRange
和RemoveRange
(为了对称)。一个更好的问题是为什么没有IList<T>
类似于接口的接口的扩展方法IEnumerable<T>
。(就地Sort
, BinarySearch
, ... 的扩展方法会很有用)
于 2012-07-18T09:37:14.997 回答
15
对于那些想要在 IList 上具有“AddRange”、“Sort”、... 的扩展方法的人,
下面是AddRange
扩展方法:
public static void AddRange<T>(this IList<T> source, IEnumerable<T> newList)
{
if (source == null)
{
throw new ArgumentNullException(nameof(source));
}
if (newList == null)
{
throw new ArgumentNullException(nameof(newList));
}
if (source is List<T> concreteList)
{
concreteList.AddRange(newList);
return;
}
foreach (var element in newList)
{
source.Add(element);
}
}
我创建了一个小型库来执行此操作。我发现它比必须在每个项目上重做其扩展方法更实用。
有些方法比 List 慢,但它们可以完成工作。
这是让他们感兴趣的 GitHub:
于 2019-07-31T12:04:10.050 回答