Wie der name Tupel Eigenschaften?
How und "könnte" organisierte Rückkehr aus der Methode zurückgibt Tupel-Typ mit dem Namen von paramiters,
als ein exapmle
private static Tuple<string, string> methodTuple()
{
return new {Name = "Nick", Age = "Twenty"}; /*exception because need to new Tuple<string, string>(){Item1 = "Nick", Item2 = "Twenty"}o*/
}
- und Aufruf-Parameter wie methodTuple.Name
nicht wie methodTuple.Item1....N
Ist das möglich oder nicht?
UPD: ich möchte ein Objekt erstellen mit benannten Parametern ohne neue Namen geben.
Nein, es ist nicht möglich. Was Sie erreichen wollen?
mögliche Duplikate von Bessere Benennung im Tupel-Klassen als "Item1", "Item2"
es wurde endlich möglich, ab C# - v7.0. Ich habe eine ausführliche Antwort in diesem thread um die details.
mögliche Duplikate von Bessere Benennung im Tupel-Klassen als "Item1", "Item2"
es wurde endlich möglich, ab C# - v7.0. Ich habe eine ausführliche Antwort in diesem thread um die details.
InformationsquelleAutor AleksP | 2015-01-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie deklarieren Sie eine helper-Klasse zu tun.
Was Sie versuchen, um return ist ein anonymer Typ. Wie der name schon sagt, Sie weiß nicht, was sein name ist, so kann man nicht erklären Sie Ihre Methode, um es zurückzugeben.
Anonyme Typen (C# - Programmierhandbuch)
Update
C#7 führt Tupel Unterstützung gebaut in der Sprache und es kommt mit benannten Tupel
Lesen Sie mehr auf docs.microsoft.com: https://docs.microsoft.com/en-us/dotnet/articles/csharp/csharp-7#tuples
Tuple
oder anonyme Typen.InformationsquelleAutor MarcinJuraszek
In C# 7.0 (Visual Studio 2017) gibt es eine neue option, das zu tun:
Denken Sie als öffentliche Felder (oder Eigenschaften), sollten Sie im richtigen Fall, denke ich
Diese option ist verfügbar für ValueTuples nicht für Tupel!
InformationsquelleAutor MichaelMocko
Dies ist nicht möglich, mit
Tuple
keine. Sie müssen erstellen Sie Ihre eigenen, neuen Namen geben, dies zu tun.Was ist der Punkt zu verwenden, der ein Tupel mit benannten Eigenschaften, über die nur mit einem normalen Klasse oder anonyme Typ? Frage nur, weil ich kann nicht denken, ein use case, der nicht bedeckt durch die ursprünglichen Möglichkeiten.
Ich ermutige Sie zu stellen, die sich als eine Frage. Hoffentlich Eric, der Leiter der c# - team, geben Sie Ihr denken. Hier sind die neuen Funktionen: blogs.msdn.microsoft.com/dotnet/2016/08/24/...
Anders Hejlsberg, ist der Kopf des C# - team. Wenn du meinst, Eric Lippert, verließ er das C# - team eine Reihe von Jahren zurück, und war nie der Kopf des Teams.
InformationsquelleAutor Servy
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# - v6 als detaillierte hier.
InformationsquelleAutor RBT
Ich in der Regel erstellen Sie eine neue Art, die sich von Tupel, und Karte Ihre ausdrückliche Eigenschaften Rückkehr der Basisklasse ItemX Eigenschaften.
eg:
InformationsquelleAutor Tyson
Dies ist leider nicht möglich mit der "Tupel" Art, wie es definiert ist als "Item1...N" in der MSDN-Website. Also diese Ausnahme ist gültig.
Diese Methode kompilieren kann in 3 Möglichkeiten:
1.) Ändern Sie den Rückgabetyp auf Objekt - diese erstellen einen "anonymen" geben, die Sie später verwenden können. Es ist nicht besonders nützlich, wenn Sie möchten, um den Zugriff auf die "Name" oder "Alter" - Eigenschaft später ohne zusätzliche Arbeit.
2.) "Rückgabetyp ändern" aus, um dynamische - dies ermöglicht Ihnen den Zugriff auf die "Name" und "Age" Eigentum, aber es wird das gesamte Programm (nur die DLL, wo diese Methode befindet sich wirklich) etwas langsamer als die Verwendung von dynamischen erfordert, werfen einige starke Typisierung.
3.) Erstellen Sie eine Klasse und verwenden Sie es als teh zurück geben.
Beispielcode hier:
InformationsquelleAutor Matt Clark
Als pro mich, wenn Sie zurückkehren wollen oder bekommen, viele Dinge aus einer einzelnen Methode, besser zu machen, seine Rückkehr als Typ KLASSE, aber wenn Sie verwenden möchten, Tupel, das sich die Klasse dann für eine bessere Namensgebung dieser neuen Klasse Erben sollen von Tupel. z.B., die unten erwähnt werden.
InformationsquelleAutor nissinku
Könnten Sie versuchen, dynamisch:
... aber wieder ein definierter Typ oder Struktur ist am besten, wie schon erwähnt.
Dann er ' ll haben alles verloren, statische Typsicherheit, klar besiegen der ganze Zweck von mehr semantisch sinnvolle information in der Art (und dann einige). Es macht den code auch merklich schlimmer als sogar mit Namen für die Eigenschaft von
Item1
undItem2
. Statt zwei Eigenschaften mit schlechten Namen, den Anrufer jetzt nicht einmal weiß, welche Eigenschaften es gibt, wie Sie heißen, was Ihre Typen sind, etc.es satifies der Anforderung. Sie sagen, es gibt keine Verwendung für dynamische?
Das ist ein Loch andere Geschichte.
Er sagt, dass dies ist keine geeignete Verwendung von
dynamic
nicht, dass es keine angemessenen Gebrauch vondynamic
. Das sind zwei grundlegend unterschiedliche Aussagen.InformationsquelleAutor Crowcoder