Udostępnij za pośrednictwem


Delegaty ogólne do manipulowania tablicami i listami

Ten temat przedstawia ogólne omówienie delegatów do konwersji, predykatów wyszukiwania oraz akcji, które należy podjąć na elementach tablicy lub kolekcji.

Delegaty ogólne do manipulowania tablicami i listami

Delegat Action<T> ogólny reprezentuje metodę, która wykonuje jakąś akcję dla elementu określonego typu. Możesz utworzyć metodę, która wykonuje żądaną akcję na elemecie, utworzyć wystąpienie Action<T> delegata reprezentującego tę metodę, a następnie przekazać tablicę i delegata do statycznej Array.ForEach metody ogólnej. Metoda jest wywoływana dla każdego elementu tablicy.

Klasa List<T> ogólna udostępnia również metodę ForEach , która używa delegata Action<T> . Ta metoda nie jest ogólna.

Uwaga / Notatka

To zwraca uwagę na interesujący aspekt typów ogólnych i metod. Metoda Array.ForEach musi być statyczna (Shared w Visual Basic) i ogólna, ponieważ Array nie jest typem ogólnym. Jedynym powodem, dla Array.ForEach którego można określić typ do działania, jest to, że metoda ma własną listę parametrów typu. Natomiast metoda niegeneryczna List<T>.ForEach należy do klasy List<T>ogólnej , więc po prostu używa parametru typu klasy . Klasa jest silnie typizowana, więc metoda może być metodą instancyjną.

Delegat Predicate<T> ogólny reprezentuje metodę, która określa, czy określony element spełnia zdefiniowane kryteria. Można go użyć z następującymi statycznymi metodami ogólnymi Array, aby wyszukać element lub zestaw elementów: Exists, Find, FindAll, FindIndex, FindLast, FindLastIndex i TrueForAll.

Predicate<T> Działa również z odpowiednimi metodami wystąpienia List<T> niegenerycznych klasy ogólnej.

Delegat Comparison<T> ogólny umożliwia podanie kolejności sortowania dla tablicy lub elementów listy, które nie mają natywnej kolejności sortowania, lub zastąpienia natywnej kolejności sortowania. Utwórz metodę realizującą porównanie, następnie stwórz instancję delegata Comparison<T> reprezentującą tę metodę, a na końcu przekaż tablicę oraz delegata do statycznej ogólnej metody Array.Sort<T>(T[], Comparison<T>). Klasa List<T> ogólna udostępnia odpowiednie przeciążenie metody instancyjnej, List<T>.Sort(Comparison<T>).

Delegat Converter<TInput,TOutput> ogólny umożliwia zdefiniowanie konwersji między dwoma typami i przekonwertowanie tablicy jednego typu na tablicę drugiej lub przekonwertowanie listy jednego typu na listę drugiego typu. Utwórz metodę, która konwertuje elementy istniejącej listy na nowy typ, następnie utwórz wystąpienie delegata reprezentującego tę metodę, i użyj ogólnej metody statycznej Array.ConvertAll, aby przekształcić oryginalną tablicę w tablicę nowego typu, lub użyj ogólnej metody wystąpienia List<T>.ConvertAll<TOutput>(Converter<T,TOutput>), aby przekształcić oryginalną listę w listę nowego typu.

Delegowanie łańcuchowe

Wiele metod używających tych delegatów zwraca tablicę lub listę, którą można przekazać do innych metod. Jeśli na przykład chcesz wybrać niektóre elementy tablicy, przekonwertować te elementy na nowy typ i zapisać je w nowej tablicy, możesz przekazać tablicę zwróconą przez FindAll metodę ogólną do ConvertAll metody ogólnej. Jeśli nowy typ elementu nie ma naturalnej kolejności sortowania, można przekazać tablicę zwróconą przez metodę ogólną ConvertAll do metody ogólnej Sort<T>(T[], Comparison<T>).

Zobacz także