Werte zuweisen des Arrays getrennte Variablen in einer Zeile
Kann ich weisen Sie jeder Wert in einem array zu trennen, Variablen in einer Zeile in C#? Hier ein Beispiel in Ruby-code, was ich will:
irb(main):001:0> str1, str2 = ["hey", "now"]
=> ["hey", "now"]
irb(main):002:0> str1
=> "hey"
irb(main):003:0> str2
=> "now"
Ich bin mir nicht sicher, ob das, was ich bin zu wollen, ist es möglich in C#.
Edit: für diejenigen, die darauf hindeutet, ich einfach weisen Sie die strings "Hallo" und "jetzt" zu Variablen, das ist nicht das, was ich will. Stellen Sie sich Folgendes vor:
irb(main):004:0> val1, val2 = get_two_values()
=> ["hey", "now"]
irb(main):005:0> val1
=> "hey"
irb(main):006:0> val2
=> "now"
Nun die Tatsache, dass die Methode get_two_values
zurückgegebenen strings "Hallo" und "jetzt" ist willkürlich. In der Tat könnte es wieder zwei Werte, die Sie nicht haben, um Zeichenfolgen sein.
InformationsquelleAutor der Frage Sarah Vessels | 2009-09-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist nicht möglich in C#.
Die nächste Sache, die ich denken kann, ist die Verwendung der Initialisierung in der gleichen Linie mit indexs
InformationsquelleAutor der Antwort JaredPar
Update: In C#7 können Sie leicht ordnen Sie mehrere Variablen auf einmal mit Tupeln. Um zuweisen von array-Elementen auf die Variablen, würden Sie schreiben müssen, eine entsprechende
Deconstruct()
extension Methoden:Alte Antwort:
In der Tat, können Sie erreichen eine ähnliche Funktionalität in C# durch die Verwendung von extension-Methoden wie diese (Anmerkung: ich habe nicht enthalten die Prüfung, ob Argumente gültig sind):
Und Sie können Sie verwenden, wie diese:
Fall einen Rückgabewert von einer Funktion gebraucht wird, ist die folgende überladung funktionieren würde:
In dieser Weise:
Vermeiden Sie, dass zu wiederholen array-Namen, wie in der vorgeschlagenen Lösung durch JaredPar und andere; die Liste der "Variablen" ist leicht zu Lesen.
Vermeiden Sie explizit zu deklarieren Variablen-Typen wie in Daniel Earwicker Lösung.
Den Nachteil, dass Sie am Ende mit zusätzliche code-block, aber ich denke, es lohnt sich. Verwenden Sie code-snippets, um zu vermeiden, Eingabe von geschweiften Klammern usw. manuell.
Ich weiß, es ist eine 7 Jahre alte Frage, aber nicht so vor langer Zeit, ich brauchte so eine Lösung - einfach, Namen zu geben array-Elemente übergeben in die Methode (Nein, mit Klassen/structs anstelle von arrays war nicht praktikabel, da für die gleichen arrays könnte ich brauchen unterschiedliche element-Namen in verschiedenen Methoden) und leider landete ich mit code wie diesem:
Nun, ich könnte schreiben, (in der Tat, ich habe umgestaltet werden, eine dieser Methoden jetzt!):
Meine Lösung ist ähnlich wie pattern matching in F# und ich wurde inspiriert durch diese Antwort: https://stackoverflow.com/a/2321922/6659843
InformationsquelleAutor der Antwort user1414213562
Den realen Anwendungsfall ist die Bereitstellung eine bequeme Möglichkeit zum zurückgeben mehrerer Werte aus einer Funktion. So ist es eine Ruby-Funktion zurückgibt, die eine Feste Anzahl von Werten in das array, und der Anrufer will, dass Sie in zwei getrennte Variablen. Dies ist, wo die Funktion macht am meisten Sinn:
Ausdrücken in C# würde man daneben die beiden Parameter mit
out
in der Methodendefinition, und zurückvoid
:Und so zu nennen:
Es ist nicht so schön. Hoffentlich in einer zukünftigen version von C# wird dies ermöglichen:
Dies zu ermöglichen, werden die
GetInfo
- Methode liefert eineTuple<string, string>
. Dies wäre ein non-breaking change zur Sprache wie die aktuellen gesetzlichen Verwendung vonvar
sind sehr restriktiv, so dass es keine gültige bedienen, aber für die oben genannten "multiple-Erklärung" syntax.InformationsquelleAutor der Antwort Daniel Earwicker
Ist es nicht.
InformationsquelleAutor der Antwort sepp2k
Können Sie diese in C#
oder Sie können mit Effekten wie diesem
InformationsquelleAutor der Antwort ja72
Können Sie es tun, in einer Linie, aber nicht wie eine Anweisung.
Beispiel:
Python-und ruby-Unterstützung der Aufgabe, die Sie zu tun versuchen; C# nicht.
InformationsquelleAutor der Antwort Randolpho
Nein, aber Sie können initialisieren Sie ein array von strings:
Aber das ist wohl nicht allzu nützlich für Sie. Ehrlich gesagt, Ihre nicht zu schwer, um Sie auf zwei Linien:
InformationsquelleAutor der Antwort Ron Warholic
Können Sie benannte Tupel mit C# 7 jetzt.
InformationsquelleAutor der Antwort Illuminati