List.AddRange()
は存在しますが、IList.AddRange()
は存在しません。
これは奇妙に思えます。この背後にある理由は何ですか?
インターフェイスは実装が簡単で、「キッチン以外のすべて」を含まないためです。 AddRange
を追加する場合は、InsertRange
とRemoveRange
(対称)を追加する必要があります。より良い質問は、IList<T>
インターフェースに似たIEnumerable<T>
インターフェースの拡張メソッドがない理由です。 (インプレースSort
、BinarySearch
、...の拡張メソッドが便利です)
IListで「AddRange」、「Sort」などの拡張メソッドを使用する場合は、
以下はAddRange
拡張メソッドです。
public static void AddRange<T>(this IList<T> source, IEnumerable<T> newList)
{
if (source == null)
{
throw new ArgumentNullException(nameof(source));
}
if (newList == null)
{
throw new ArgumentNullException(nameof(newList));
}
if (source is List<T> concreteList)
{
concreteList.AddRange(newList);
return;
}
foreach (var element in newList)
{
source.Add(element);
}
}
これを行う小さなライブラリを作成しました。各プロジェクトで拡張メソッドをやり直すよりも実用的です。
いくつかのメソッドはリストより遅いですが、仕事をします。
それらに興味を持たせるGitHubは次のとおりです。