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

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

Запись where T : struct отсекает ссылочные типы и nullable value types вроде int?. Подходят встроенные числа, struct и record struct. У любого такого T есть доступный конструктор без параметров, поэтому ограничение new() для struct не добавляют отдельно.

Синтаксис

struct Cell<T> where T : struct { public T Value; }

Пример

Давайте сохраним число в ячейке с ограничением struct:

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

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

5

Пример

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

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

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

1 2

Пример

Давайте вернём значение из обобщённого метода с struct:

using System; class Scale { public static T Double<T>(T value) where T : struct { if (value is int num) { return (T)(object)(num * 2); } return value; } } class Program { static void Main() { int res = Scale.Double(3); Console.WriteLine(res); } }

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

6

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

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