一位同事今天问我如何将范围添加到集合中。他有一个继承自的类Collection<T>
。有一个该类型的get-only属性,其中已经包含一些项目。他想将另一个集合中的项目添加到属性集合中。他如何以C#3友好的方式这样做?(请注意有关“仅获取”属性的约束,该约束会阻止执行Union和重新分配之类的解决方案。)
当然,与财产有关。添加将起作用。但是,List<T>
风格的AddRange会更加优雅。
编写扩展方法很容易:
public static class CollectionHelpers
{
public static void AddRange<T>(this ICollection<T> destination,
IEnumerable<T> source)
{
foreach (T item in source)
{
destination.Add(item);
}
}
}
但是我有种自己在重新发明轮子的感觉。我没有发现任何类似的System.Linq
或morelinq。
设计不好?只需致电添加?缺少明显之处?
Add(T item)
放在首位呢?似乎是一种半生半熟的方法,它提供了添加单个项目的功能,然后期望所有调用者进行迭代以一次添加多个。您的声明当然是正确的,IEnumerable<T>
但我发现自己ICollections
不止一次感到沮丧。我不同意你,只是发泄。