Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
1115 of 1492 menu
◀ ▶

Ограничение unmanaged

Условие where T : unmanaged означает, что T - тип-значение, в котором нет ссылок: подходят int, char и struct, состоящий только из неуправляемых полей. string и классы не подходят. Ограничение включает struct и не сочетается с new().

Синтаксис

void Copy<T>(T value) where T : unmanaged { }

Пример

Давайте сохраним число в обёртке с unmanaged:

using System; struct Slot<T> where T : unmanaged { public T Value; } class Program { static void Main() { var slot = new Slot<int> { Value = 5 }; Console.WriteLine(slot.Value); } }

Результат выполнения кода:

5

Пример

Давайте используем struct только из полей int:

using System; struct Pair { public int Left; public int Right; } struct Box<T> where T : unmanaged { public T Data; } class Program { static void Main() { var box = new Box<Pair> { Data = new Pair { Left = 1, Right = 2 } }; Console.WriteLine($"{box.Data.Left} {box.Data.Right}"); } }

Результат выполнения кода:

1 2

Пример

Давайте вернём значение по умолчанию для неуправляемого T:

using System; class Zero<T> where T : unmanaged { public T Value => default; } class Program { static void Main() { var zero = new Zero<int>(); Console.WriteLine(zero.Value); } }

Результат выполнения кода:

0

Смотрите также

  • ограничение struct,
    которое шире, чем unmanaged
  • allows ref struct,
    которое относится к другим правилам для T
  • тип int,
    который удовлетворяет unmanaged
  • ключевое слово struct,
    из которого собирают неуправляемые типы
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить