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;
}


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow