Parametrar

En parameter är ett värde som skickas in till en metod. Det är metodens ingång — data den behöver för att göra sitt jobb.

När du läst detta ska du kunna

  • Förklara skillnaden mellan parameter och argument
  • Skriva metoder med en eller flera parametrar
  • Använda default-värden
  • Anropa metoder med namngivna argument

Parameter vs argument

Dessa ord förväxlas ofta — de är nära besläktade men inte samma sak:

BegreppFörklaringExempel
ParameterVariabeln i metodens definitionvoid Greet(string name) → name är parameter
ArgumentVärdet som skickas in vid anropGreet("Anna") → "Anna" är argument
// ↓ parameter
void Greet(string name)
{
Console.WriteLine($"Hej, {name}!");
}
// ↓ argument
Greet("Anna");

Flera parametrar

void Introduce(string name, int age)
{
Console.WriteLine($"{name} är {age} år.");
}
Introduce("Björn", 28);

Output

Björn is 28 year.

Ordningen på argumenten vid anrop måste matcha ordningen på parametrarna.

Default-värden

En parameter kan ha ett standardvärde som används om argumentet utelämnas:

void PrintDivider(char symbol = '-', int length = 20)
{
Console.WriteLine(new string(symbol, length));
}
PrintDivider(); // - - - - - - - - - - - - - - - - - - - -
PrintDivider('='); // ====================
PrintDivider('*', 10); // **********

Output

--------------------
====================
**********

Parametrar med default-värden måste stå sist.

Namngivna argument

Du kan skicka argument i valfri ordning om du namnger dem:

void CreateUser(string name, int age, string role = "user")
{
Console.WriteLine($"{name}, {age} år, roll: {role}");
}
CreateUser(age: 30, name: "Clara", role: "admin");

Output

Clara, 30 year, role: admin

Namngivna argument är extra tydliga när metoden har många parametrar av samma typ.

Värde kopieras — originalet påverkas inte

C# skickar som standard en kopia av värdet. Originalet ändras inte:

void Double(int number)
{
number *= 2; // påverkar bara den lokala kopian
Console.WriteLine($"Inuti: {number}");
}
int value = 5;
Double(value);
Console.WriteLine($"Utanför: {value}");

Output

Inside: 10
Outside: 5

Vill du påverka originalet? Använd ref eller out — se respektive sida.

TL;DR

Syntax
En parametervoid M(int x)
Fleravoid M(int x, string y)
Defaultvoid M(int x = 0)
Namngivet anropM(x: 5)