Współpracownik zapytał mnie dzisiaj, jak dodać zakres do kolekcji. Ma klasę, która dziedziczy Collection<T>
. Istnieje właściwość get-only tego typu, która zawiera już pewne elementy. Chce dodać elementy z innej kolekcji do kolekcji właściwości. Jak może to zrobić w sposób przyjazny dla C # 3? (Zwróć uwagę na ograniczenie dotyczące właściwości get-only, które zapobiega rozwiązaniom takim jak wykonywanie Union i ponowne przypisywanie).
Jasne, foreach z Property. Dodaj zadziała. Ale List<T>
AddRange w stylu a byłby znacznie bardziej elegancki.
Łatwo jest napisać metodę rozszerzającą:
public static class CollectionHelpers
{
public static void AddRange<T>(this ICollection<T> destination,
IEnumerable<T> source)
{
foreach (T item in source)
{
destination.Add(item);
}
}
}
Ale mam wrażenie, że wymyślam koło na nowo. Nie znalazłem nic podobnego w System.Linq
lub morelinq .
Zły projekt? Po prostu zadzwoń Dodaj? Brakuje oczywistości?
ICollection<T>
Wydaje się, że jeden problem nie ma Add
metody. msdn.microsoft.com/en-us/library/… Jednak Collection<T>
ma jeden.
Add(T item)
w ogóle mieć ? Wydaje się, że jest to niedopracowane podejście do oferowania możliwości dodania pojedynczego elementu, a następnie oczekiwania, że wszyscy dzwoniący będą iterować, aby dodać więcej niż jeden naraz. Twoje stwierdzenie z pewnością jest prawdziwe, IEnumerable<T>
ale nieraz byłem sfrustrowany ICollections
. Nie zgadzam się z tobą, po prostu wyładowuję.