一位同事今天問我如何添加範圍到一個集合。他有一個繼承自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