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
- Grundlagen der Value Tuples
- Benannte Tupel-Elemente
- Dekonstruktion
- Tupel als Rückgabewerte von Methoden