同僚から本日、コレクションに範囲を追加する方法を尋ねられました。彼はから継承するクラスを持っていCollection<T>
ます。そのタイプのget-onlyプロパティがあり、すでにいくつかのアイテムが含まれています。別のコレクションのアイテムをプロパティコレクションに追加したいと考えています。どのようにしてC#3フレンドリーな方法でこれを行うことができますか (取得専用プロパティに関する制約に注意してください。これにより、Unionの実行や再割り当てなどの解決策が妨げられます。)
確かに、プロパティの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(T item)
そもそも持っているのですか?単一の項目を追加する機能を提供し、すべての呼び出し元が一度に複数を追加するために反復することを期待する中途半端なアプローチのようです。あなたの発言は確かに当てはまりますがIEnumerable<T>
、私はICollections
何度も不満を感じています。私はあなたと意見を異にしません。