List.AddRange()存在,但IList.AddRange()没有.
这让我很奇怪.这背后的原因是什么?
xan*_*tos 64
因为界面应该易于实现,并且不包含"除了厨房之外的所有东西".如果添加AddRange,则应添加InsertRange和RemoveRange(对称).一个更好的问题是为什么没有IList<T>类似于IEnumerable<T>接口的接口的扩展方法.(就地扩展方法Sort,BinarySearch...将是有益的)
小智 13
对于那些想要在 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);
}
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个小型图书馆来做到这一点。我发现它比必须在每个项目上重做其扩展方法更实用。
有些方法比 List 慢,但它们可以完成工作。
这是他们感兴趣的 GitHub:
| 归档时间: |
|
| 查看次数: |
19989 次 |
| 最近记录: |