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

3voto

maoyang Punkte 979

から diese Artikel können Sie drei Optionen verwenden, wie in den obigen Beiträgen beschrieben.

KeyValuePair ist der schnellste Weg.

aus ist an der zweiten.

Tupel ist am langsamsten.

Wie auch immer, das hängt davon ab, was für Ihr Szenario das Beste ist.

3voto

Niels Punkte 986

Zukünftige Versionen von C# werden benannte Tupel enthalten. Schauen Sie sich diese channel9-Sitzung für die Demo an https://channel9.msdn.com/Events/Build/2016/B889

Springen Sie zu 13:00 für das Tupel-Zeug. Dies ermöglicht Dinge wie:

(int sum, int count) Tally(IEnumerable<int> list)
{
// calculate stuff here
return (0,0)
}

int resultsum = Tally(numbers).sum

(unvollständiges Beispiel aus dem Video)

2voto

Ogge Punkte 814

Sie könnten ein dynamisches Objekt verwenden. Ich denke, es ist besser lesbar als Tuple.

static void Main(string[] args){
    var obj = GetMultipleValues();
    Console.WriteLine(obj.Id);
    Console.WriteLine(obj.Name);
}

private static dynamic GetMultipleValues() {
    dynamic temp = new System.Dynamic.ExpandoObject();
    temp.Id = 123;
    temp.Name = "Lorem Ipsum";
    return temp;
}

2voto

Roland Punkte 3869

Verwenden Sie einfach in OOP-Manier eine Klasse wie diese:

class div
{
    public int remainder;

    public int quotient(int dividend, int divisor)
    {
        remainder = ...;
        return ...;
    }
}

Das Funktionsmitglied gibt den Quotienten zurück, an dem die meisten Aufrufer in erster Linie interessiert sind. Zusätzlich speichert es den Rest als Datenelement, auf das der Aufrufer anschließend leicht zugreifen kann.

Auf diese Weise können Sie viele zusätzliche "Rückgabewerte" haben, was sehr nützlich ist, wenn Sie Datenbank- oder Netzwerkaufrufe implementieren, bei denen viele Fehlermeldungen benötigt werden, aber nur, wenn ein Fehler auftritt.

Ich habe diese Lösung auch in die C++-Frage eingegeben, auf die sich OP bezieht.

1voto

Dom Punkte 434

Wie man das macht:

1) KeyValuePair (beste Leistung - 0,32 ns):

    KeyValuePair<int, int> Location(int p_1, int p_2, int p_3, int p_4)
    {                 
         return new KeyValuePair<int,int>(p_2 - p_1, p_4-p_3);
    }

2) Tupel - 5,40 ns:

    Tuple<int, int> Location(int p_1, int p_2, int p_3, int p_4)
    {
          return new Tuple<int, int>(p_2 - p_1, p_4-p_3);
    }

3) out (1,64 ns) oder ref 4) Erstellen Sie Ihre eigene benutzerdefinierte Klasse/Konstruktion

ns -> Nanosekunden

Referenz: Mehrfach-Rückgabewerte .

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