今天我的同事问我如何将范围添加到集合中。他有一个继承自
编写一个扩展方法非常容易:
Collection<T>
的类。该类型已经包含了一些项目的只读属性。他想要将另一个集合中的项添加到该属性集合中。在C#3中,他应该如何做呢?(请注意get-only属性的限制,这会阻止像Union和重新分配之类的解决方案。)
当然,使用Property.Add的foreach可以实现目标。但是,像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吗?错过了显而易见的东西?
ICollection<T>
似乎没有Add
方法。但是Collection<T>
有一个。http://msdn.microsoft.com/en-us/library/system.collections.icollection_methods(v=vs.100).aspx - Tim GoodmanAdd(T item)
呢?似乎这是一个半成品的方法,提供了添加单个项的能力,然后期望所有调用者按顺序迭代以一次添加多个项。你的说法对于IEnumerable<T>
肯定是正确的,但我发现自己在处理ICollections
时有过不少挫败感。我不反对你的观点,只是在抱怨。 - akousmata