Delegaty ogólne do manipulowania tablicami i listami
Ten temat zawiera omówienie ogólnych delegatów konwersji, predykatów wyszukiwania i akcji do wykonania 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
To sprawia, że interesujący punkt na temat 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ą wystąpienia.
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ólnymiArray, aby wyszukać element lub zestaw elementów: Exists, FindIndexFindAllFindLastFind, FindLastIndexi .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ę, która wykonuje porównanie, utwórz wystąpienie delegata Comparison<T> , aby reprezentować metodę, a następnie przekaż tablicę i delegata do statycznej Array.Sort<T>(T[], Comparison<T>) metody ogólnej. Klasa List<T> ogólna udostępnia odpowiednie przeciążenie metody wystąpienia, 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, utwórz wystąpienie delegata do reprezentowania metody i użyj Array.ConvertAll ogólnej metody statycznej, aby utworzyć tablicę nowego typu z oryginalnej tablicy lub List<T>.ConvertAll<TOutput>(Converter<T,TOutput>) metodę wystąpienia ogólnego w celu utworzenia listy nowego typu z oryginalnej listy.
Delegowanie łańcuchowe
Wiele metod używających tych delegatów zwraca tablicę lub listę, którą można przekazać do innej metody. 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ą ConvertAll przez metodę ogólną do Sort<T>(T[], Comparison<T>) metody ogólnej.