Funktion mit mehreren Rückgabewerten

Funktion mit mehreren Rückgabewerten

# Lösung "anonymes Objekt" + "dynamisches Keyword"

Sie können ein anonymes Objekt von 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 darin enthaltenen Werte aus.

/// dynamic object
dynamic x = FunctionWithUnknowReturnValues();

Console.WriteLine(x.a);
Console.WriteLine(x.b);

# Tuple-Lösung

Sie können eine Instanz von Tuple zurückgeben 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

Die ref Das Schlüsselwort wird verwendet, um ein Argument als Referenz zu übergeben. out macht dasselbe wie ref aber es erfordert keinen zugewiesenen Wert durch den Aufrufer vor dem Aufruf der Funktion.

Referenzparameter :-Wenn Sie eine Variable als ref-Parameter übergeben möchten, müssen Sie sie initialisieren, bevor Sie sie als ref-Parameter an die Methode übergeben.

Out-Parameter :- Wenn Sie eine Variable als Ausgangsparameter übergeben möchten, müssen Sie sie nicht initialisieren, bevor Sie sie als Ausgangsparameter 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;
}

# Bemerkungen

Es gibt in C# keine inhärente Antwort auf dieses – sogenannte – Bedürfnis. Nichtsdestotrotz gibt es Problemumgehungen, um diese Anforderung zu erfüllen.

Der Grund, warum ich die Notwendigkeit als "sogenannt" qualifiziere, ist, dass wir nur Methoden mit 2 oder mehr als 2 Werten benötigen, die zurückgegeben werden, wenn wir gegen gute Programmierprinzipien verstoßen. Insbesondere das Single-Responsibility-Prinzip .

Daher wäre es besser, benachrichtigt zu werden, wenn wir Funktionen benötigen, die 2 oder mehr Werte zurückgeben, und unser Design zu verbessern.