params în C# (.NET)

Bazele limbajului și I/O C# 1.0 (colecții: C# 13)

Permite unei metode să primească oricâte argumente de același tip, separate prin virgulă, fără să creezi tu tabloul.

Sintaxă C#
static int Suma(params int[] numere)  // C# 13: params ReadOnlySpan<int> numere

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&lt;T&gt; 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

  • params pus înaintea altui parametru nu se compilează: trebuie să fie ultimul.
  • Cu params object[], un singur argument de tip object[] este luat ca listă întreagă, nu ca un element. Atenție la apelurile cu null.

Comenzi înrudite