Dela via


Allmänna ombud för att manipulera matriser och listor

Det här avsnittet innehåller en översikt över allmänna ombud för konverteringar, sökpredikat och åtgärder som ska vidtas på element i en matris eller samling.

Allmänna ombud för att manipulera matriser och listor

Det Action<T> allmänna ombudet representerar en metod som utför en viss åtgärd på ett element av den angivna typen. Du kan skapa en metod som utför önskad åtgärd på elementet, skapa en instans av ombudet för att representera den Action<T> metoden och sedan skicka matrisen och ombudet till den Array.ForEach statiska generiska metoden. Metoden anropas för varje element i matrisen.

Den List<T> generiska klassen innehåller också en ForEach metod som använder ombudet Action<T> . Den här metoden är inte allmän.

Kommentar

Detta gör en intressant punkt om generiska typer och metoder. Metoden Array.ForEach måste vara statisk (Shared i Visual Basic) och generisk eftersom Array den inte är en allmän typ. Den enda anledningen till att du kan ange en typ för Array.ForEach att arbeta med är att metoden har en egen typparameterlista. Däremot tillhör den icke-generiska List<T>.ForEach metoden den generiska klassen List<T>, så den använder helt enkelt typparametern för sin klass. Klassen är starkt skriven, så metoden kan vara en instansmetod.

Det Predicate<T> allmänna ombudet representerar en metod som avgör om ett visst element uppfyller de kriterier som du definierar. Du kan använda den med följande statiska allmänna metoder Array för att söka efter ett element eller en uppsättning element: Exists, Find, FindAll, FindIndex, FindLast, FindLastIndexoch TrueForAll.

Predicate<T> fungerar också med motsvarande icke-generiska instansmetoder för den List<T> generiska klassen.

Med Comparison<T> det allmänna ombudet kan du ange en sorteringsordning för matris- eller listelement som inte har någon intern sorteringsordning eller åsidosätta den interna sorteringsordningen. Skapa en metod som utför jämförelsen, skapa en instans av ombudet Comparison<T> för att representera din metod och skicka sedan matrisen och ombudet till den Array.Sort<T>(T[], Comparison<T>) statiska generiska metoden. Den List<T> generiska klassen tillhandahåller en motsvarande överlagring av instansmetod, List<T>.Sort(Comparison<T>).

Med det Converter<TInput,TOutput> allmänna ombudet kan du definiera en konvertering mellan två typer och konvertera en matris av en typ till en matris av den andra, eller konvertera en lista av den ena typen till en lista över den andra. Skapa en metod som konverterar elementen i den befintliga listan till en ny typ, skapa en ombudsinstans som representerar metoden och använd den Array.ConvertAll generiska statiska metoden för att skapa en matris av den nya typen från den ursprungliga matrisen eller den List<T>.ConvertAll<TOutput>(Converter<T,TOutput>) generiska instansmetoden för att skapa en lista med den nya typen från den ursprungliga listan.

Länkningsdelegater

Många av metoderna som använder dessa ombud returnerar en matris eller lista, som kan skickas till en annan metod. Om du till exempel vill välja vissa element i en matris, konvertera dessa element till en ny typ och spara dem i en ny matris, kan du skicka matrisen som returneras av den FindAll generiska metoden till den ConvertAll generiska metoden. Om den nya elementtypen saknar en naturlig sorteringsordning kan du skicka matrisen som returneras av den ConvertAll generiska metoden till den Sort<T>(T[], Comparison<T>) generiska metoden.

Se även