645 Stimmen

Mehrere Werte an einen Methodenaufrufer zurückgeben

Ich habe die C++-Version dieser Frage aber ich habe es nicht wirklich verstanden.

Kann jemand bitte klar erklären, wenn es in C# getan werden kann, und wie?

0 Stimmen

Basierend auf der Antwort auf die erwähnte Frage, in C/C++ & vor dem Variablennamen bedeutet "pass by reference", mit Referenzparametern können Sie die Variable an die Funktion übergeben und ihren Wert innerhalb der Funktion ändern, in C# können Sie es mit ref / out Parametern tun

14voto

cruzier Punkte 308
<--Return more statements like this you can --> 

public (int,string,etc) Sample( int a, int b)  
{
    //your code;
    return (a,b);  
}

Sie können Codes erhalten wie

(c,d,etc) = Sample( 1,2);

Ich hoffe, es funktioniert.

13voto

dustyburwell Punkte 5705

Nein, Sie können nicht mehrere Werte aus einer Funktion in C# zurückgeben (für Versionen niedriger als C# 7), zumindest nicht in der Art und Weise, wie Sie es in Python tun können.

Es gibt jedoch eine Reihe von Alternativen:

Sie können ein Array vom Typ Objekt mit den gewünschten Mehrfachwerten zurückgeben.

private object[] DoSomething()
{
    return new [] { 'value1', 'value2', 3 };
}

Sie können verwenden out Parameter.

private string DoSomething(out string outparam1, out int outparam2)
{
    outparam1 = 'value2';
    outparam2 = 3;
    return 'value1';
}

11voto

Andrew Hare Punkte 332190

Es gibt mehrere Möglichkeiten, dies zu tun. Sie können verwenden ref Parameter:

int Foo(ref Bar bar) { }

Damit wird ein Verweis an die Funktion übergeben, so dass die Funktion das Objekt im Stapel des aufrufenden Codes ändern kann. Obwohl dies technisch gesehen kein "zurückgegebener" Wert ist, ist es eine Möglichkeit, eine Funktion etwas Ähnliches tun zu lassen. Im obigen Code würde die Funktion einen int und (potenziell) ändern bar .

Ein ähnlicher Ansatz ist die Verwendung eines out Parameter. Eine out Parameter ist identisch mit einem ref Parameter mit einer zusätzlichen, vom Compiler erzwungenen Regel. Diese Regel besagt, dass wenn Sie einen out Parameter in eine Funktion einfügt, muss diese Funktion seinen Wert vor der Rückkehr setzen. Neben dieser Regel kann eine out Parameter funktioniert genau wie ein ref Parameter.

Der letzte Ansatz (und in den meisten Fällen der beste) besteht darin, einen Typ zu erstellen, der beide Werte kapselt, und der Funktion zu erlauben, diesen zurückzugeben:

class FooBar 
{
    public int i { get; set; }
    public Bar b { get; set; }
}

FooBar Foo(Bar bar) { }

Dieser letzte Ansatz ist einfacher und leichter zu lesen und zu verstehen.

10voto

stanimirsp Punkte 1838

Wenn Ihre Methode asynchron und Sie möchten mehrere Eigenschaften zurückgeben. Sie müssen wie folgt vorgehen:

public async Task<(int, int)> GetMultipleValues(){
   return (1,2);
}

10voto

Rikin Patel Punkte 8408

Können Sie dieses "KeyValuePair" ausprobieren

private KeyValuePair<int, int> GetNumbers()
{
  return new KeyValuePair<int, int>(1, 2);
}

var numbers = GetNumbers();

Console.WriteLine("Output : {0}, {1}",numbers.Key, numbers.Value);

Ausgang :

Ausgang : 1, 2

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X