List.AddRange()
existiert, aber IList.AddRange()
nicht.
Das kommt mir seltsam vor. Was ist der Grund dafür?
88
Denn eine Schnittstelle sollte einfach zu implementieren sein und nicht "alles außer der Küche" enthalten. Wenn Sie hinzufügen AddRange
, sollten Sie InsertRange
und RemoveRange
(aus Symmetriegründen) hinzufügen . Eine bessere Frage wäre, warum es keine Erweiterungsmethoden für die IList<T>
Schnittstelle gibt, die der Schnittstelle ähnlich sind IEnumerable<T>
. (Erweiterungsmethoden für in-place Sort
, BinarySearch
... wäre nützlich)
AddRange/RemoveRange/InsertRange
kann direkt an der "internen" Sammlung arbeiten und dieCapacity
Verwaltung optimieren und Methoden verwendenArray.Copy
, um Datenblöcke zu verschieben. Eine ErweiterungsmethodeRemoveRange
wäre wahrscheinlich eine Größenordnung langsamer alsList.RemoveRange
IFoo
) Deklaration eines „Helfer“ Namespace angeben (zBMyAssembly
) , so dass , wenn eine Klasse Ansprüche zu implementieren ,IFoo
aber es fehlt Verfahrenint Bar(String)
würde die Compiler auto- Methode generierenint IFoo.Bar(String p1) {return MyAssembly.ClassHelpers.IFoo.Bar(this, p1);}
Wäre eine solche Funktion vorhanden, hätten die Schnittstellen möglicherweise mehr Methoden enthaltenAddRange
, die im Hinblick auf ein Basisverhalten implementiert werden könnten, die jedoch von einigen Implementierungen optimiert werden könnten.Für diejenigen, die Erweiterungsmethoden für "AddRange", "Sort", ... auf IList haben möchten,
Unten ist die
AddRange
Erweiterungsmethode:Ich habe eine kleine Bibliothek erstellt, die dies tut. Ich finde es praktischer, als die Erweiterungsmethoden für jedes Projekt wiederholen zu müssen.
Einige Methoden sind langsamer als List, aber sie erledigen den Job.
Hier ist der GitHub, der sie interessiert:
IListExtension-Repository
quelle