params — variabelt antal argument
params låter en metod ta emot hur många argument du vill — utan att anroparen behöver skapa en array. Inuti metoden är de ett vanligt array.
När du läst detta ska du kunna
- Skriva en metod med
params - Anropa den med 0, 1 eller hur många argument som helst
- Förstå att
paramsmåste vara sista parametern
Utan params — lite klumpigt
int Sum(int[] numbers){ return numbers.Sum();}
// Anroparen måste skapa en arrayConsole.WriteLine(Sum(new[] { 1, 2, 3, 4 }));Med params — rent anrop
int Sum(params int[] numbers){ return numbers.Sum();}
Console.WriteLine(Sum(1, 2, 3, 4)); // 10Console.WriteLine(Sum(10, 20)); // 30Console.WriteLine(Sum()); // 0 (tom array)Output
10300Du kan fortfarande skicka en array explicit om du föredrar det:
int[] values = [5, 6, 7];Console.WriteLine(Sum(values)); // 18params kombinerat med vanliga parametrar
void PrintAll(string label, params string[] items){ Console.WriteLine($"{label}:"); foreach (var item in items) Console.WriteLine($" - {item}");}
PrintAll("Frukter", "Äpple", "Banan", "Päron");PrintAll("Tomt");Output
Fruits: - Apple - Banana - PearEmpty:params måste alltid vara sista parametern.
Console.WriteLine använder params
Console.WriteLine och string.Format är exempel ur .NET:
// Internt: WriteLine(string format, params object?[] args)Console.WriteLine("{0} + {1} = {2}", 3, 4, 7);params med andra samlingstyper
Sedan C# 13 fungerar params med fler typer än bara arrayer. Du kan använda IEnumerable<T>, List<T>, ReadOnlySpan<T> och andra samlingstyper:
// IEnumerable<T> — accepterar vilken samling som helstvoid PrintAll(params IEnumerable<string> items){ foreach (var item in items) Console.WriteLine(item);}
// ReadOnlySpan<T> — nollkopiering, bra för prestandaint FastSum(params ReadOnlySpan<int> numbers){ int total = 0; foreach (var n in numbers) total += n; return total;}// Alla anropssätt fungerarPrintAll("Anna", "Björn", "Clara");
var list = new List<string> { "David", "Emma" };PrintAll(list); // skicka en List<string> direkt
Console.WriteLine(FastSum(1, 2, 3)); // 6Console.WriteLine(FastSum([4, 5, 6])); // 15 — samlingsuttryck fungerarVälj typ efter behov
| Typ | Passar när |
|---|---|
params T[] | Standard — enkelt och universellt |
params IEnumerable<T> | Vill ta emot vilken samling som helst |
params ReadOnlySpan<T> | Prestanda-kritisk kod — undviker heap-allokering |
params List<T> | Behöver ändra listan inuti metoden |
Regler
- Bara en
params-parameter per metod - Måste vara sista parametern
- Kan anropas med 0 argument
TL;DR
params int[] numbers — anroparen skickar valfritt antal int. Inuti metoden är det en vanlig array. Sedan C# 13 funkar params med IEnumerable<T>, List<T> och ReadOnlySpan<T> också.