2009-07-12 12 views
23

Ich bin in einer Situation, in der ich nur Werte in String-Array (Typ String []) an ein Objekt mit IList <String> anhängen möchten. Ein kurzer Blick auf MSDN ergab, dass IList <T> 's Insert-Methode hat nur eine Version, die einen Index und ein Objekt T nimmt, und hat keine Version, die IEnumerable <T> anstelle von T. Dies bedeutet, dass Ich muss eine Schleife über eine Eingabeliste schreiben, um Werte in die Zielliste aufzunehmen. Wenn das der Fall ist, scheint es sehr einschränkend und eher sehr unfreundliches API-Design für mich zu sein. Vielleicht vermisse ich etwas. Was machen C# Experten in diesem Fall?Warum hat IList <T> keine Insert-Methoden, die IEnumerable <T> übernehmen?

Antwort

38

Da eine Schnittstelle im Allgemeinen die geringste Funktionalität benötigt, um sie nutzbar zu machen, um die Belastung der Implementierer zu reduzieren. Mit C# 3.0 können Sie dies als eine Erweiterungsmethode hinzufügen:

public static void AddRange<T>(this IList<T> list, IEnumerable<T> items) { 
    if(list == null) throw new ArgumentNullException("list"); 
    if(items == null) throw new ArgumentNullException("items"); 
    foreach(T item in items) list.Add(item); 
} 

et voila; IList<T> jetzt hat AddRange:

IList<string> list = ... 
string[] arr = {"abc","def","ghi","jkl","mno"}; 
list.AddRange(arr); 
+7

Sie das tun könnte, aber sein hat seine Risiken, wenn Sie AddRange aufrufen, können Sie die Aufgabe zugrunde, erwarten ein gewisses Verständnis haben, dass sie auf eine Reihe arbeitet. In einem Datenbindungsszenario kann dies dazu führen, dass Tausende von Ereignissen in einem Szenario ausgelöst werden, in dem ein Ereignis ausreichend gewesen wäre. –

+0

@Sam; tatsächlich; aber es ist das Beste, was Sie über IList tun können ; Es gibt natürlich Möglichkeiten, das zu kompensieren ... –

+1

Danke für die Antwort Marc. Ich habe immer noch das Gefühl, dass die Schnittstelle so gestaltet sein sollte, dass die Benutzerfreundlichkeit mehr gewichtet wird als die Leichtigkeit der Implementierbarkeit, wenn man bedenkt, dass das Hinzufügen einer Liste zu einer anderen Liste eine so häufige Operation ist. Wie auch immer, die Erweiterungsmethode funktioniert in diesem Fall sehr gut, also ist es vielleicht nichts, worüber man sich aufregt. – Kei

Verwandte Themen