Perl hat die Fähigkeit zuweisen zu tun: im GegensatzWie zu einer Liste von Variablen in einer Anweisung
my ($a,$b,$c,$d) = foo();
wo foo
kehren 4 Variablen, um sie einen nach dem anderen zugewiesen wird. Gibt es in C# etwas Ähnliches?
Perl hat die Fähigkeit zuweisen zu tun: im GegensatzWie zu einer Liste von Variablen in einer Anweisung
my ($a,$b,$c,$d) = foo();
wo foo
kehren 4 Variablen, um sie einen nach dem anderen zugewiesen wird. Gibt es in C# etwas Ähnliches?
Nein, im Grunde genommen. Optionen:
object[] values = foo();
int a = (int)values[0];
string b = (string)values[1];
// etc
oder:
var result = foo();
// then access result.Something, result.SomethingElse etc
oder:
int a;
string b;
float c; // using different types to show worst case
var d = foo(out a, out b, out c); // THIS WILL CONFUSE PEOPLE and is not a
// recommendation
@lazyberezovsky letztlich alle diese Dinge sind Möglichkeiten, mehrere Werte outbound von einer Funktion auszudrücken, und sie an den Anrufer Einheimischen zuweisen; der * Mechanismus * dafür (Listen, etc) ist die Implementierung Details –
habe es vielen Dank! – user2521358
Wenn Sie schlechte Optionen aufzählen, können Sie auch ein 'Tuple
Für Funktionen müssen Sie entweder ein Objekt oder void
zurückzukehren. Aber Sie können dieses Problem auf verschiedene Arten angehen.
struct
oder class
erstellen, die a,b,c,d
enthalten und zurück, dass als Funktion z data foo()
Daten enthalten a, b, c, dout
im Parameter Ihrer Funktion verwenden, z. foo (out a, out b, out c, out d), aber Ihre Variableneingaben müssen initialisiert werden. Mehr Infos hier. Siehe http://msdn.microsoft.com/en-us/library/t3c3bfhx(v=vs.80).aspxref
verwenden, die ähnlich wie out ist. Siehe http://msdn.microsoft.com/en-US/library/14akc2c7(v=vs.80).aspxarrray
oder list
als ein anderes Mitglied zurückzukehren, hat darauf hingewiesen,Denken Sie auch daran, je auf dem Typ, den Sie strcut vs Objekte übergeben, die Sie Wert als Value
oder Reference
übergeben können. Siehe http://msdn.microsoft.com/en-us/library/0f66670z(v=vs.71).aspx
Ad 4. Array, Liste oder (vorzugsweise) ein "IEnumerable" –
Tuple
kann ein nützliches Konstrukt dafür sein.
public Tuple<int, string, double> Foo() { ... }
Dann können Sie tun:
var result = Foo();
int a = result.Item1;
string b = result.Item2;
double c = result.Item3;
Dies ist ein Vermächtnis des zunehmenden Einflusses der funktionalen Programmierung Stile auf C# ist: ist das Tupel ein grundlegendes Konstrukt in vielen funktionalen Sprachen und unterstützt stark in ihrer statische Eingabe
Warum nicht eine Klasse dafür machen? –
AFAIK nein, aber als @ 491243 sagte, Sie können Klasse – wudzik
verwenden Nur interessant - wenn diese Funktion nützlich sein kann? –