Współpracownik poprosił mnie dzisiaj o dodanie zakresu do kolekcji. Ma klasę, która dziedziczy po Collection<T>
. Istnieje właściwość typu "tylko pobierz", która zawiera już pewne elementy. Chce dodać przedmioty z innej kolekcji do kolekcji nieruchomości. Jak może to zrobić w przyjazny dla C# 3 sposób? (Należy zwrócić uwagę na ograniczenie dotyczące właściwości "tylko przyzwolenie", która uniemożliwia takie rozwiązania, jak przydział i ponowne przypisanie.)AddRange do kolekcji
Oczywiście, foreach z własnością. Dodaj będzie działać. Ale styl AddRange w stylu List<T>
byłby znacznie bardziej elegancki.
To proste wystarczy napisać metodę rozszerzenia:
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 jestem wyważania otwartych drzwi. Nie znalazłem nic podobnego w System.Linq
lub morelinq.
Zły projekt? Po prostu zadzwoń Dodaj? Brakujące oczywiste?
Pamiętaj, że Q z LINQ to "zapytanie" i tak naprawdę chodzi o odzyskiwanie danych, rzutowanie, przekształcanie itp.Modyfikowanie istniejących kolekcji naprawdę nie wchodzi w zakres zamierzonego celu LINQ, dlatego też LINQ nie dostarcza niczego poza tym zestawem. Ale metody rozszerzenia (w szczególności Twoja próbka) byłyby idealne do tego. – Levi
Jeden problem, "ICollection" wydaje się nie mieć metody "Dodaj". http://msdn.microsoft.com/en-us/library/system.collections.icollection_methods(v=vs.100).aspx Jednak 'Collection ' ma jeden. –
@TimGoodman - To nietypowy interfejs. Zobacz http://msdn.microsoft.com/en-us/library/92t2ye13.aspx – TrueWill