0Pricing
C# Academy · Lektion

Tupel als Rückgabewerte von Methoden

Geben Sie mehrere Ergebnisse ohne out-Parameter zurück.

Tupel als Rückgabewerte von Methoden ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C# Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.

Mehrere Werte zurückgeben

Eine Methode kann nur eine Sache zurückgeben, aber ein Tupel kann mehrere Werte in dieser einen Rückgabe bündeln – eine klare Alternative zu out-Parametern.

using System;

class Program
{
    static (int, int) Divide(int a, int b) => (a / b, a % b);

    static void Main()
    {
        var result = Divide(17, 5);
        Console.WriteLine(result.Item1 + " r " + result.Item2);
    }
}

Benannte Tupel als Rückgabetypen

Durch das Benennen der zurückgegebenen Elemente wird die Methode selbstdokumentierend und die Aufrufstelle besser lesbar.

using System;

class Program
{
    static (int Quotient, int Remainder) Divide(int a, int b)
    {
        return (a / b, a % b);
    }

    static void Main()
    {
        var r = Divide(17, 5);
        Console.WriteLine("Q=" + r.Quotient + ", R=" + r.Remainder);
    }
}

Die Rückgabe dekonstruieren

Aufrufer können das zurückgegebene Tupel direkt in separate Variablen dekonstruieren.

using System;

class Program
{
    static (double Min, double Max) Bounds(double[] data)
    {
        double min = data[0], max = data[0];
        foreach (var d in data)
        {
            if (d < min) min = d;
            if (d > max) max = d;
        }
        return (min, max);
    }

    static void Main()
    {
        var (lo, hi) = Bounds(new double[] { 3, 7, 1, 9, 4 });
        Console.WriteLine("min=" + lo + ", max=" + hi);
    }
}

Die Alternative mit dem out-Parameter

Vor Tupeln bedeutete die Rückgabe zusätzlicher Werte, out-Parameter zu verwenden. Sie funktionieren, sind aber bei Deklaration und Aufruf umständlicher.

using System;

class Program
{
    static int Divide(int a, int b, out int remainder)
    {
        remainder = a % b;
        return a / b;
    }

    static void Main()
    {
        int rem;
        int q = Divide(17, 5, out rem);
        Console.WriteLine("Q=" + q + ", R=" + rem);
    }
}

Tupel und out: Lesbarkeit

Bei Tupelrückgaben bleiben alle Ergebnisse im Rückgabewert und lassen sich mit Dekonstruktion natürlich lesen. Für einfache Fälle werden sie daher gewöhnlich gegenüber out bevorzugt.

using System;

class Program
{
    static (int Sum, int Count) Stats(int[] nums)
    {
        int sum = 0;
        foreach (var n in nums) sum += n;
        return (sum, nums.Length);
    }

    static void Main()
    {
        var (sum, count) = Stats(new[] { 2, 4, 6 });
        Console.WriteLine("Sum=" + sum + ", Count=" + count);
    }
}

Status und Wert zurückgeben

Ein häufiges Muster besteht darin, neben dem Ergebnis ein Erfolgskennzeichen zurückzugeben – ähnlich dem Try-Muster, aber in einem Tupel gebündelt.

using System;

class Program
{
    static (bool Ok, int Value) ParseAge(string s)
    {
        if (int.TryParse(s, out int n) && n >= 0)
            return (true, n);
        return (false, 0);
    }

    static void Main()
    {
        var r = ParseAge("42");
        Console.WriteLine(r.Ok ? "Parsed " + r.Value : "Invalid");
    }
}

Wann out weiterhin nützlich ist

out bleibt für das integrierte Try-Muster idiomatisch (int.TryParse), bei dem ein boolesches Ergebnis und ein out-Wert üblich sind.

using System;

class Program
{
    static void Main()
    {
        if (int.TryParse("100", out int value))
            Console.WriteLine("Got " + value);
        else
            Console.WriteLine("Not a number");
    }
}

Mehrere benannte Felder zurückgeben

Tupel lassen sich auf mehrere Ergebnisse erweitern, ohne dass Sie dafür eine einmalige Klasse erstellen müssen.

using System;

class Program
{
    static (int Min, int Max, double Avg) Analyze(int[] nums)
    {
        int min = nums[0], max = nums[0], sum = 0;
        foreach (var n in nums)
        {
            if (n < min) min = n;
            if (n > max) max = n;
            sum += n;
        }
        return (min, max, (double)sum / nums.Length);
    }

    static void Main()
    {
        var a = Analyze(new[] { 4, 8, 2, 6 });
        Console.WriteLine("min=" + a.Min + ", max=" + a.Max + ", avg=" + a.Avg);
    }
}

Wann eine Klasse vorzuziehen ist

Wenn die gruppierten Daten über eigenes Verhalten verfügen, häufig wiederverwendet werden oder eine Validierung benötigen, definieren Sie stattdessen eine Klasse oder einen Record, anstatt überall ein Tupel zurückzugeben.

using System;

class Program
{
    // Fine as a tuple: small, local, no behavior
    static (int W, int H) ParseSize(string s)
    {
        var parts = s.Split('x');
        return (int.Parse(parts[0]), int.Parse(parts[1]));
    }

    static void Main()
    {
        var (w, h) = ParseSize("16x9");
        Console.WriteLine(w + " by " + h);
    }
}

Zurückgegebene Tupel verketten

Sie können ein zurückgegebenes Tupel direkt in eine weitere Berechnung einfließen lassen, indem Sie es inline dekonstruieren.

using System;

class Program
{
    static (int, int) Split(int total) => (total / 2, total - total / 2);

    static void Main()
    {
        var (a, b) = Split(7);
        Console.WriteLine("Halves: " + a + " + " + b + " = " + (a + b));
    }
}

Alles zusammenführen

Ein benanntes Tupel zurückzugeben ist die moderne, gut lesbare Möglichkeit, einige zusammengehörige Werte aus einer Methode zurückzugeben, ohne zusätzlichen Aufwand.

using System;

class Program
{
    static (bool Found, int Index) Search(int[] arr, int target)
    {
        for (int i = 0; i < arr.Length; i++)
            if (arr[i] == target) return (true, i);
        return (false, -1);
    }

    static void Main()
    {
        var r = Search(new[] { 5, 8, 12 }, 8);
        Console.WriteLine(r.Found ? "At index " + r.Index : "Not found");
    }
}

Kurze Überprüfung

Testen Sie Ihr Verständnis von Tupelrückgabewerten.

Zusammenfassung

Mit der Rückgabe eines Tupels kann eine Methode mehrere Werte auf einmal zurückgeben – für die meisten Fälle eine sauberere Option als out. Benennen Sie die Elemente für mehr Klarheit und lassen Sie die Aufrufer sie dekonstruieren. Verwenden Sie out für das konventionelle Try-Muster und bevorzugen Sie eine Klasse oder einen Record, wenn die Daten Verhalten oder eine breite Wiederverwendung erfordern.

using System;

class Program
{
    static (int Sum, int Max) Go(int[] n)
    {
        int s = 0, m = n[0];
        foreach (var x in n) { s += x; if (x > m) m = x; }
        return (s, m);
    }

    static void Main()
    {
        var (sum, max) = Go(new[] { 3, 9, 5 });
        Console.WriteLine(sum + " / " + max);
    }
}

Häufig gestellte Fragen

Ist die Lektion „Tupel als Rückgabewerte von Methoden“ kostenlos?

Ja — der vollständige Text von „Tupel als Rückgabewerte von Methoden“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C# Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Tupel als Rückgabewerte von Methoden“?

Geben Sie mehrere Ergebnisse ohne out-Parameter zurück. Du übst C# Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C# Academy zu starten?

Keine Vorkenntnisse erforderlich. C# Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Tupel als Rückgabewerte von Methoden“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C# Academy-Lektion Code schreiben und ausführen?

Ja. Jede C# Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Grundlagen der Value Tuples
  2. Benannte Tupel-Elemente
  3. Dekonstruktion
  4. Tupel als Rückgabewerte von Methoden
← Zurück zu C# Academy