Ограничение 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