Ce face params
Un parametru marcat params adună toate argumentele rămase într-o colecție. Apelul Suma(1, 2, 3) este echivalent cu Suma(new[] { 1, 2, 3 }), iar Suma() primește o colecție goală. Exemplul cunoscut este Console.WriteLine(format, params object?[] arg).
Până la C# 12 tipul trebuia să fie un tablou. Din C# 13 (.NET 9) poate fi și ReadOnlySpan<T>, Span<T>, List<T>, IEnumerable<T> sau alt tip de colecție. Cu ReadOnlySpan<T> argumentele nu mai alocă un tablou pe heap.
Parametri
| Parametru | Descriere |
|---|---|
params T[] / params ReadOnlySpan<T> |
Trebuie să fie ultimul parametru al metodei și poate exista unul singur. |
Exemple
Exemplul 1: Sumă cu oricâte valori
Console.WriteLine(Suma());
Console.WriteLine(Suma(10));
Console.WriteLine(Suma(10, 20, 30));
int[] cos = [5, 15];
Console.WriteLine(Suma(cos));
static int Suma(params int[] numere)
{
int total = 0;
foreach (int n in numere)
total += n;
return total;
}
Rezultat
0
10
60
20
Exemplul 2: params ReadOnlySpan (C# 13)
Primul parametru e obișnuit, restul argumentelor merg în span.
Jurnal("INFO", "Pornire", "Conectat la baza de date");
Jurnal("EROARE", "Fișier lipsă");
static void Jurnal(string nivel, params ReadOnlySpan<string> mesaje)
{
foreach (string m in mesaje)
Console.WriteLine($"[{nivel}] {m}");
}
Rezultat
[INFO] Pornire
[INFO] Conectat la baza de date
[EROARE] Fișier lipsă
Greșeli frecvente
paramspus înaintea altui parametru nu se compilează: trebuie să fie ultimul.- Cu
params object[], un singur argument de tipobject[]este luat ca listă întreagă, nu ca un element. Atenție la apelurile cunull.
Comenzi înrudite
Metode (static, void, return): O metodă grupează cod reutilizabil sub un nume: primește parametri, poate returna o valoare cu return sau nimic (void).Parametri opționali și argumente numite: Parametrii cu valoare implicită pot lipsi la apel; argumentele numite (nume: valoare) se pot da în orice ordine.