2017-08-24 2 views
0

So bin ich mir nicht sicher, ob so etwas überhaupt möglich ist. Könnte sein? Einfach nur neugierig ...Mehrere Variablen gleichzeitig zuweisen mit Methode Rückkehr

// Initial values of the strings. 
string variable1 = "Something", variable2 = "SomethingElse"; 

// New values for the strings. ** LEFT OF ASSIGNMENT OPERATOR WON'T COMPILE ** 
(variable1, variable2) = DoSomething(variable1, variable2); 

// Method to modify the initial strings. 
public List<string> DoSomething(string v1, string v2) 
{ ...; return new List<string> { v1, v2 }; } 
+0

[Dieses Feature] (https: //docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-7#tuples) ist neu in C# 7 - es wird in keiner älteren Version funktionieren. –

+0

Persönlich kenne ich diese Funktion nur aus der LISP-Programmiersprache ("multiple-value-setq" -Form). Mainstream-Sprachen können nur ein Objekt von einer Funktion zurückgeben und eine Variable in einer Anweisung zuweisen. Oh, wie ich diese LISP-Funktion vermisse ... –

Antwort

2

Sie wahrscheinlich über etwas syntaktisch ähnlich wie

C#7 Tupples

Nizza Eigenschaft davon, abgesehen von kürzeren Erklärung als üblich Tuple<T> fragen, ist, dass Sie genannt haben, können Elemente , was aus Sicht des Code-Lesens und der Wartung eine große Sache ist.

Wenn Sie nur Semantik der Umsetzung fragen: 2 zurück double Werte auf einmal mit C#heute, können Sie offensichtlich Tuple<T> verwenden, wie

Tuple<double, double> = DoSomething();

+0

Danke für deine Antwort, @Tigran. Tupel sind definitiv etwas, das ich untersuchen werde, aber ich denke nicht, dass es den Anforderungen dieser Frage entspricht. Ich glaube, ich müsste immer noch auf das Tupel per Index zugreifen, um den Variablen zuzuordnen. Das Ziel wäre, den Variablen direkt zuzuweisen, was von der Methode zurückgegeben wird. –

+2

@GregGreenleaf: warum nicht 'out' oder' ref' dann verwenden? – Tigran

+0

Ich schaute ein bisschen mehr in Tupel, @Tigran, und ich denke, dass Sie Recht haben. Tupel haben eine eingebaute Fähigkeit, dekonstruierende Aufgabe genannt, die perfekt in das passt, was ich mich gefragt habe. Also danke, dass du mich in die richtige Richtung weist. '(erste, mittlere, letzte) = LookupName (id2); // Dekonstruktion der Aufgabe' –

Verwandte Themen