ref-возврат
ref-возврат указывает на место,
которое живёт дольше вызова - например
элемент массива. Нельзя вернуть ref
на локальную переменную или на
stackalloc:
после выхода из метода кадр стека исчезает.
Синтаксис
static ref int Item(int[] data) => ref data[0];
Пример
Давайте прочитать первый элемент через ref:
using System;
class Program
{
static ref int Item(int[] data) => ref data[0];
static void Main()
{
int[] data = { 1, 2, 3 };
ref int slot = ref Item(data);
int res = slot;
Console.WriteLine(res);
}
}
Результат выполнения кода:
1
Пример
Давайте записать через ref-возврат:
using System;
class Program
{
static ref int Item(int[] data) => ref data[0];
static void Main()
{
int[] data = { 1, 2, 3 };
Item(data) = 9;
Console.WriteLine(data[0]);
}
}
Результат выполнения кода:
9
Пример
Давайте проверить, что остальные элементы не тронуты:
using System;
class Program
{
static ref int Item(int[] data) => ref data[0];
static void Main()
{
int[] data = { 1, 2, 3 };
Item(data) = 9;
Console.WriteLine(data[1]);
}
}
Результат выполнения кода:
2
Смотрите также
-
ref readonly,
только чтение через ссылку -
ref-поле,
хранение ссылки вref struct -
ref struct,
тип на стеке -
указатель,
адрес вunsafe