Wie initialisiere ich eine Tupel-Liste?
Ich Liebe Tupel. Sie ermöglichen die schnelle Gruppe relevanten Informationen zusammen, ohne zu schreiben, eine Struktur oder Klasse. Dies ist sehr nützlich beim refactoring sehr lokalisierte code.
Initialisierung eine Liste von Ihnen scheint jedoch ein wenig überflüssig.
var tupleList = new List<Tuple<int, string>>
{
Tuple.Create( 1, "cow" ),
Tuple.Create( 5, "chickens" ),
Tuple.Create( 1, "airplane" )
};
Gibt es nicht einen besseren Weg? Ich würde gerne eine Lösung entlang der Linien von der Wörterbuch-Initialisierer.
Dictionary<int, string> students = new Dictionary<int, string>()
{
{ 111, "bleh" },
{ 112, "bloeh" },
{ 113, "blah" }
};
Können wir nicht verwenden eine ähnliche syntax wie?
InformationsquelleAutor der Frage Steven Jeuris | 2011-11-03
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
c# 7.0 können Sie dies tun:
Wenn Sie nicht brauchen, ein
List
sondern nur ein array, können Sie tun:Und wenn Sie nicht wie "Element1" und "Element2", die Sie tun können:
oder
können Sie tun:
tupleList[0].Index
undtupleList[0].Name
Rahmen 4.6.2 und unten
Müssen Sie installieren
System.ValueTuple
aus dem Nuget-Paket-Manager.Rahmen 4.7 und höher
Es ist gebaut in den Rahmen. Tun nicht installieren
System.ValueTuple
. In der Tat, entfernen Sie es und löschen Sie es aus dem bin-Verzeichnis.Hinweis: Im wirklichen Leben, ich wäre nicht in der Lage zu wählen zwischen Kuh, Hühner oder Flugzeug. Ich wäre echt hin und her gerissen.
InformationsquelleAutor der Antwort toddmo
Ja! Dies ist möglich.
Dies ermöglicht Ihnen, Folgendes zu tun:
InformationsquelleAutor der Antwort Steven Jeuris
C# 6 gibt es eine neue Funktion, die nur für diese: Erweiterung Methoden Hinzufügen. Dies war schon immer möglich VB.net aber das ist jetzt in C# verfügbar.
Jetzt müssen Sie nicht haben, hinzufügen
Add()
Methoden, um Ihre Klassen, die Sie direkt umsetzen können Sie als Erweiterung Methoden. Wenn sich alle aufzählbaren Typ mit einerAdd()
Methode, werden Sie in der Lage, es zu benutzen in auflistungsinitialisierer Ausdrücken. So dass Sie nicht haben, um eine Ableitung von Listen, die explizit mehr (wie bereits erwähnt in einer anderen Antwort), können Sie einfach erweitern.Wird diese ermöglichen es Ihnen, dies zu tun für jede Klasse, die implementiert
IList<>
:Natürlich sind Sie nicht beschränkt auf die Ausweitung Kollektionen von Tupeln, kann es sein, für die Sammlungen der eine bestimmte Art, die Sie wollen, dass die spezielle syntax für.
C# 7 wird das hinzufügen von Unterstützung für Personen gebaut, die in die Sprache, obwohl Sie von einem anderen Typ (
System.ValueTuple
statt). Also, es wäre gut, hinzufügen überladungen für Wert-Tupeln, so dass Sie die Möglichkeit haben, den Sie als gut. Leider gibt es keine impliziten Konvertierungen definiert zwischen den beiden.Diese Weise die Liste der Initialisierung Aussehen wird noch schöner.
Aber anstatt zu gehen durch alle diese Probleme, vielleicht ist es einfach besser zu dem Schalter
ValueTuple
ausschließlich.InformationsquelleAutor der Antwort Jeff Mercado
Können Sie dies durch den Aufruf der Konstruktor jedes mal mit, ist etwas besser
InformationsquelleAutor der Antwort Kevin Holditch
Alte Frage, aber das ist, was ich normalerweise tun, um die Dinge ein bisschen mehr lesbar:
InformationsquelleAutor der Antwort Asad Saeeduddin
Warum wie Tupel? Es ist wie anonyme Typen: keine Namen. Nicht verstehen kann die Struktur der Daten.
Ich mag klassische Klassen
InformationsquelleAutor der Antwort Alexey Obukhov
Einer Technik, die ich denke, ist ein wenig einfacher und die, die noch nicht erwähnt wurde hier:
Ich denke, das ist ein bisschen sauberer als:
InformationsquelleAutor der Antwort Alex Dresko
InformationsquelleAutor der Antwort Egi Messito