Модификатор in
Параметр in - это ссылка только для
чтения: метод не должен менять переданное
значение. Для больших структур это экономит
копирование, в отличие от передачи по значению.
При вызове для переменной ключевое слово in
можно не писать - компилятор подставит его сам.
Синтаксис
void Метод(in тип имя)
Метод(переменная);
Пример
Давайте прочитаем число через in и
вернём сумму с единицей:
using System;
class Program
{
static int AddOne(in int num)
{
return num + 1;
}
static void Main()
{
int src = 10;
Console.WriteLine(AddOne(src));
Console.WriteLine(src);
}
}
Результат выполнения кода:
11
10
Пример
Давайте явно укажем in в вызове метода:
using System;
class Program
{
static int Read(in int num)
{
return num;
}
static void Main()
{
int src = 12;
Console.WriteLine(Read(in src));
}
}
Результат выполнения кода:
12
Пример
Давайте сравним две структуры через in:
using System;
struct Point
{
public int X;
public int Y;
}
class Program
{
static int Sum(in Point p)
{
return p.X + p.Y;
}
static void Main()
{
var p = new Point { X = 1, Y = 2 };
Console.WriteLine(Sum(p));
}
}
Результат выполнения кода:
3
Пример
Давайте найдем большую из двух величин, не копируя их лишний раз:
using System;
class Program
{
static int Max(in int left, in int right)
{
return left >= right ? left : right;
}
static void Main()
{
int a = 3;
int b = 5;
Console.WriteLine(Max(a, b));
}
}
Результат выполнения кода:
5