Ein Mitarbeiter hat mich heute gefragt, wie ich einer Sammlung einen Bereich hinzufügen kann. Er hat eine Klasse, die von erbt Collection<T>
. Es gibt eine Get-Only-Eigenschaft dieses Typs, die bereits einige Elemente enthält. Er möchte die Objekte in einer anderen Sammlung zur Eigenschaftssammlung hinzufügen. Wie kann er das C # 3-freundlich machen? (Beachten Sie die Einschränkung bezüglich der get-only-Eigenschaft, die Lösungen wie Union und Neuzuweisung verhindert.)
Sicher, ein Foreach mit Eigentum. Hinzufügen wird funktionieren. Ein List<T>
AddRange im Stil wäre jedoch weitaus eleganter.
Es ist einfach genug, eine Erweiterungsmethode zu schreiben:
public static class CollectionHelpers
{
public static void AddRange<T>(this ICollection<T> destination,
IEnumerable<T> source)
{
foreach (T item in source)
{
destination.Add(item);
}
}
}
Aber ich habe das Gefühl, das Rad neu zu erfinden. Ich habe nichts Ähnliches in System.Linq
oder Morelinq gefunden .
Schlechtes Design? Einfach Add anrufen? Vermissen Sie das Offensichtliche?
ICollection<T>
scheint keine Add
Methode zu haben . msdn.microsoft.com/en-us/library/… Hat jedoch Collection<T>
eine.
Add(T item)
? Scheint ein halbherziger Ansatz zu sein, der die Möglichkeit bietet, ein einzelnes Element hinzuzufügen und dann zu erwarten, dass alle Anrufer iterieren, um mehr als ein Element gleichzeitig hinzuzufügen. Ihre Aussage ist sicherlich richtig, IEnumerable<T>
aber ich war ICollections
mehr als einmal frustriert . Ich bin nicht anderer Meinung als Sie, nur entlüften.