Bessere Benennung in Tuple-Klassen als "Item1", "Item2"
Gibt es einen Weg, um ein Tupel der Klasse, sondern liefern die Namen der Elemente in ihm?
Beispiel:
public Tuple<int, int, int int> GetOrderRelatedIds()
Dass die Rendite der ids für OrderGroupId, OrderTypeId, OrderSubTypeId und OrderRequirementId.
Wäre es schön, um die Benutzer meiner Methode weiß, welche welche ist. (Beim Aufruf der Methode, die Ergebnisse das Ergebnis.Item1, das Ergebnis.Item2, das Ergebnis.Item3, das Ergebnis.Element4. Es ist nicht klar, welches das ist.)
(Ich weiß, ich könnte einfach erstellen Sie eine Klasse zu halten, alle diese Ids, aber diese Ids bereits über eigene Klassen, Sie Leben in und machen Sie eine Klasse für diese eine Methode den Rückgabewert albern.)
Kommentar zu dem Problem
Sie sind gonna haben, um roll your eigenen -
Tuple
ist sehr generisch, so dass Sie alles, was Sie bekommen NEIN, Sie können Sie gerne tun, finden Sie unter diesem link für mehr Informationen msdn.microsoft.com/en-us/vcsharp/ee957397
Ich wage zu behaupten, dass die Verwendung eines Tupel als öffentliche Verkleidung Datentyp für Ihre api kann nicht empfohlen werden. Ich in der Regel verwenden Tupel für kurzlebige interne Dinge nicht als Rückgabewert einer API.
Stimmen Sie für diese Funktion die es gibt: visualstudio.uservoice.com/forums/121579-visual-studio-2015/...
Es ist in der Liste von C# 7 Finden Sie unter github.com/dotnet/roslyn/issues/347
InformationsquelleAutor der Frage Vaccano | 2011-10-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
In C# 7.0 (Visual Studio 2017) es ist eine neue Konstruktion zu tun:
InformationsquelleAutor der Antwort MichaelMocko
Nein, es ist nicht ein Weg, um dies zu tun kurze Definition Ihres eigenen Typs.
InformationsquelleAutor der Antwort MarkPflug
Hier ist eine allzu komplizierte version von dem, was Sie fordern:
Warum nicht einfach machen eine Klasse?
InformationsquelleAutor der Antwort scottm
Mit .net 4 könnten Sie vielleicht Blick auf die
ExpandoObject
, aber benutze es nicht für diesen einfachen Fall, wie, was gewesen wäre, compile-Zeit-Fehler werden Laufzeitfehler.Etwas anderes erwähnenswert ist ein anonymer Typ innerhalb einer Methode, aber Sie brauchen, um eine Klasse erstellen, wenn Sie möchten, es zurückzugeben.
InformationsquelleAutor der Antwort George Duckett
Wenn die Typen Ihrer Elemente sind alle Verschieden, hier ist eine Klasse, die ich gemacht habe, um Sie mehr intuitiv.
Die Verwendung dieser Klasse:
Source code:
InformationsquelleAutor der Antwort hebinda
Nein, Sie können keine Namen der Tupel Mitglieder.
Die in-zwischen wäre ExpandoObject statt Tupel.
InformationsquelleAutor der Antwort Joe Mancuso
Warum ist jeder das Leben so schwer. Tupel sind eher für temporäre Daten Verarbeitung. Die Arbeit mit Tupeln, die alle die Zeit, wird der code sehr schwer zu verstehen, irgendwann. Erstellen von Klassen für alles konnte schließlich aufblasen Ihr Projekt.
Es ist über die balance, aber...
Dein problem scheint zu sein, etwas, was Sie wollen, eine Klasse für. Und nur der Vollständigkeit halber, dieser Kurs enthält auch Konstruktoren.
Dies ist das richtige Muster für
Oder, wenn Sie wollen, dass es ganz einfach: Sie können auch verwenden, geben Sie Initialisierungen:
InformationsquelleAutor der Antwort bytecode77
Ich glaube, ich würde eine Klasse erstellen, aber eine alternative ist die output-Parameter.
Seit Ihrer Tupel enthält nur ganze zahlen, die Sie darstellen könnte, es mit einem
Dictionary<string,int>
aber ich weiß nicht empfehlen, dass entweder.
InformationsquelleAutor der Antwort Jonas Elfström
Ich würde schreiben Sie die Namen der Elemente in der summay..
also, wenn Sie mit der Maus über die Funktion helloworld() den text Hallo sagen = Item1 und Welt = Item2
` helloworld("Hi1,Hi2");
InformationsquelleAutor der Antwort Kim Yang Jacobsen
Dies ist sehr ärgerlich und ich erwarte, dass zukünftige Versionen von C# wird diese Adresse brauchen. Ich finde die einfachste Arbeit, um zu sein, entweder eine andere Datenstruktur geben, oder benennen Sie die "items" für Ihre Gesundheit und für die geistige Gesundheit eines anderen zu Lesen, Ihre Codes.
InformationsquelleAutor der Antwort Mitch Stewart
Reproduzieren meine Antwort aus diese Beitrag, wie es ist passt besser hier.
Ab C# - v7.0 ist es nun möglich, Namen der Tupel die Eigenschaften, die früher verwendet, um die Standard-Namen wie
Item1
,Item2
und so weiter.Die Benennung der Eigenschaften von Tupel-Literale:
Die Ausgabe auf der Konsole:
Rückgabe-Tupel (mit den benannten Eigenschaften) von einer Methode:
Die Ausgabe auf der Konsole:
Erstellen einer Liste von Tupeln mit benannten Eigenschaften
Ausgabe auf der Konsole:
Ich hoffe, ich habe alles abgedeckt. Im Fall, dass es etwas gibt, was ich übersehen habe, dann bitte gebt mir ein feedback in den Kommentaren.
Hinweis: Meine code-snippets sind mit string-interpolation-feature von C# - v7 detaillierte hier.
InformationsquelleAutor der Antwort RBT
Schreiben Sie eine Klasse, die enthält die Tupel.
Müssen Sie zum überschreiben der Equals-und GetHashCode-Funktionen
und den == und != Betreiber.
zurück:
Wahr
Wahr
InformationsquelleAutor der Antwort s-s