C# · Avançado · Inglês · Técnico
in parameter
Modificador que passa o argumento por referência somente leitura, evitando copiar structs grandes. O método não pode atribuir ao parâmetro, e o chamador pode omitir a palavra in.
Onde usar
Aparece em código de desempenho que recebe structs maiores que cerca de 16 bytes, como matrizes e vetores. Combine com readonly struct: caso contrário o compilador faz cópias defensivas e perde o ganho.
Em código
double Det(in Mat m) => m.A * m.D;
Console.WriteLine(Det(new Mat(2, 3))); // 6
readonly struct Mat(double a, double d)
{
public double A { get; } = a;
public double D { get; } = d;
}Exemplos
Pass the big struct by in to avoid the copy.
Passe a struct grande por in para evitar a cópia.
The in parameter can't be assigned inside the method.
O parâmetro in não pode receber atribuição dentro do método.
Cuidado
Não use in em tipos pequenos ou de referência: passar um int por in é mais lento que por valor.
Antônimos
ref parameter