Ich habe eine Liste
%Vor%Und derzeit wähle ich dies in einem Wörterbuch die folgende Struktur:
%Vor% aber mit Linq habe ich eine etwas schlankere Art wie ToDictionary((x,index) =>
Wie ist die richtige Syntax oder wie kann dies innerhalb einer Zeile gelöst werden?
Sie können die Überladung von Select
verwenden, die den Index zum Füllen eines anonymen Typs projiziert:
Das ist das Gleiche wie der Code. Wenn Sie stattdessen das Ergebnis möchten, das Sie kommentiert haben: (1,a)(2,b)(3,c)
) müssen Sie +1 hinzufügen, damit ToDictionary(x => x.index+1, x => x.s)
.
Es gibt keine ToDictionary
-Methode, die dies in einem einzigen Aufruf angibt, da es keine Überladungen gibt, die den Index bereitstellen, aber Sie können die Select
-Überladung verwenden, die ein Func<T, int, TResult>
akzeptiert:
Oder in C # 7, vermeiden Sie die Erstellung einer Menge von Heap-allokierten Objekten mit ValueTuple
:
Ab C # 7.1-Point-Release können Sie den abgeleiteten ValueTuple
Literalausdruck verwenden:
(Wie von Tim bemerkt, müssen Sie den Index um 1 anpassen, um die ursprünglich angeforderte Ausgabe zu erhalten.)
Zuerst müssen Sie den Schlüssel und den Wert mithilfe der Select-Überladung abrufen Das ergibt auch den Index des aktuell verwendeten Elements:
%Vor%Erstellen Sie nun das Wörterbuch:
%Vor%Oder als Einzeiler:
%Vor%EDIT: Sie können auch Ihre eigene Extension-Methode erstellen, um auch die von Ihnen angegebene Syntax zu verwenden:
%Vor%Jetzt kannst du es so nennen:
%Vor%Sie können diesen Ansatz auch ohne anonymen Typ verwenden:
%Vor%Tags und Links c# list dictionary