一位同事今天问我如何添加范围到一个集合。他有一个继承自Collection<T>
的类。有一种只包含某些项目的只能获取属性。他想将另一个集合中的项目添加到属性集合中。他如何以C#3友好的方式来做到这一点? (注意关于只能获取属性的约束,这会阻止像联合和重新分配这样的解决方案。)AddRange集合
当然,这是一个带有Property的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中没有找到类似的东西。
不好的设计?打电话添加?缺少显而易见的?
请记住,来自LINQ的Q是'查询',并且实际上是关于数据检索,投影,转换等。修改现有集合实际上并不属于LINQ预期目的的领域,这就是为什么LINQ不提供任何开箱即用的功能。但扩展方法(特别是你的样本)将是理想的。 – Levi 2009-09-25 00:46:02
一个问题,'ICollection'似乎没有'Add'方法。 http://msdn.microsoft.com/en-us/library/system.collections.icollection_methods(v=vs.100).aspx然而'收集'有一个。 –
2013-07-11 05:58:27
@TimGoodman - 这是非通用界面。请参阅http://msdn.microsoft.com/en-us/library/92t2ye13.aspx – TrueWill 2013-07-11 17:26:12