List.AddRange()
existe, mais IList.AddRange()
n'existe pas.
Cela me semble étrange. Quelle en est la raison?
Parce qu'une interface doit être facile à mettre en œuvre et ne pas contenir "tout sauf la cuisine". Si vous ajoutez AddRange
, vous devez alors ajouter InsertRange
et RemoveRange
(pour la symétrie). Une meilleure question serait de savoir pourquoi il n'y a pas de méthodes d'extension pour le IList<T>
interface similaire à la IEnumerable<T>
interface. (des méthodes d'extension pour Sort
, BinarySearch
, ... sur place seraient utiles)
Pour ceux qui veulent avoir des méthodes d'extension pour "AddRange", "Sort", ... sur IList,
Voici la méthode d'extension 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);
}
}
J'ai créé une petite bibliothèque qui fait ça. Je trouve cela plus pratique que d'avoir à refaire ses méthodes d'extension sur chaque projet.
Certaines méthodes sont plus lentes que List mais elles font l'affaire.
Voici le GitHub pour les intéresser: