out — utparametrar
out låter en metod returnera extra värden utöver det vanliga returvärdet. Metoden måste tilldela parametern ett värde innan den returnerar.
När du läst detta ska du kunna
- Använda
outför att returnera flera värden - Förstå TryParse-mönstret
- Deklarera
out-variabeln inline vid anrop
Syntax
// Definition: out i signaturenvoid ParseCoordinate(string input, out double latitude, out double longitude){ var parts = input.Split(','); latitude = double.Parse(parts[0]); longitude = double.Parse(parts[1]);}
// Anrop: out + variabeldeklarationParseCoordinate("57.7,11.9", out double lat, out double lon);Console.WriteLine($"Lat: {lat}, Lon: {lon}");Output
Lat: 57,7, Lon: 11,9TryParse — det klassiska out-mönstret
out används genomgående i .NET för att kombinera en bool (lyckades?) med ett värde:
Console.Write("Ange ett heltal: ");string input = Console.ReadLine() ?? "";
if (int.TryParse(input, out int number)){ Console.WriteLine($"Du angav: {number}");}else{ Console.WriteLine("Det där var inte ett heltal.");}Output (lyckat)
Ange ett heltal: 42Du angav: 42Output (misslyckat)
Ange ett heltal: hejDet där var inte ett heltal.Andra Try-metoder i .NET som följer samma mönster: double.TryParse, DateTime.TryParse, Guid.TryParse, Dictionary.TryGetValue.
Inline-deklaration (C# 7+)
Du kan deklarera out-variabeln direkt vid anropet:
// Gammalt sättint result;bool ok = int.TryParse("123", out result);
// Modernt sätt (deklarera inline)bool ok = int.TryParse("123", out int result);Variabeln result är tillgänglig efter anropet.
Ignorera ett out-värde med _
Om du inte behöver alla out-värden, kasta det med discard _:
if (int.TryParse("42", out _)){ Console.WriteLine("Det var ett giltigt heltal.");}Regler
- Metoden måste sätta värdet innan den returnerar — annars kompileringsfel
- Anroparen behöver inte initialisera variabeln i förväg
- En
out-variabel är garanterat satt efter ett lyckat anrop
out vs returvärde — när vilket?
| Situation | Välj |
|---|---|
| Ett värde att returnera | Returvärde |
| Lyckades/misslyckades + ett värde | out (TryParse-mönstret) |
| Flera värden | out eller tuple (a, b) |
| Möjligen null | Nullable returvärde (T?) |
TL;DR
out = en extra “utgång” från metoden. Används mest för TryParse-mönstret — bool TryX(input, out T result).