C# Language
Funktion mit mehreren Rückgabewerten
Suche…
Bemerkungen
In C # gibt es keine inhärente Antwort auf dieses sogenannte Bedürfnis. Trotzdem gibt es Workarounds, um dieses Bedürfnis zu befriedigen.
Der Grund, warum ich das Bedürfnis als "so genannt" bezeichne, ist, dass wir nur Methoden mit 2 oder mehr als 2 Werten benötigen, um zurückzukehren, wenn wir gegen gute Programmiergrundsätze verstoßen. Insbesondere das Prinzip der Einzelverantwortung .
Daher wäre es besser, wenn wir auf Funktionen aufmerksam machen, die 2 oder mehr Werte zurückgeben und unser Design verbessern.
Lösung "anonymes Objekt" + "dynamisches Schlüsselwort"
Sie können ein anonymes Objekt aus Ihrer Funktion zurückgeben
public static object FunctionWithUnknowReturnValues ()
{
/// anonymous object
return new { a = 1, b = 2 };
}
Und weisen Sie das Ergebnis einem dynamischen Objekt zu und lesen Sie die Werte darin.
/// dynamic object
dynamic x = FunctionWithUnknowReturnValues();
Console.WriteLine(x.a);
Console.WriteLine(x.b);
Tuple Lösung
Sie können eine Instanz der Tuple
Klasse aus Ihrer Funktion mit zwei Vorlagenparametern als Tuple<string, MyClass>
:
public Tuple<string, MyClass> FunctionWith2ReturnValues ()
{
return Tuple.Create("abc", new MyClass());
}
Und lesen Sie die Werte wie folgt:
Console.WriteLine(x.Item1);
Console.WriteLine(x.Item2);
Ref- und Out-Parameter
Das ref
Schlüsselwort wird verwendet, um ein Argument als Referenz zu übergeben . out
tut dasselbe wie ref
, benötigt jedoch vor dem Aufruf der Funktion keinen vom Anrufer zugewiesenen Wert.
Ref-Parameter : -Wenn Sie eine Variable als ref-Parameter übergeben möchten, müssen Sie sie initialisieren, bevor Sie sie als ref-Parameter an method übergeben.
Out-Parameter: - Wenn Sie eine Variable als Out-Parameter übergeben möchten, müssen Sie sie nicht initialisieren, bevor Sie sie als Out-Parameter an die Methode übergeben.
static void Main(string[] args)
{
int a = 2;
int b = 3;
int add = 0;
int mult= 0;
AddOrMult(a, b, ref add, ref mult); //AddOrMult(a, b, out add, out mult);
Console.WriteLine(add); //5
Console.WriteLine(mult); //6
}
private static void AddOrMult(int a, int b, ref int add, ref int mult) //AddOrMult(int a, int b, out int add, out int mult)
{
add = a + b;
mult = a * b;
}