Ограничение 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,
из которого собирают неуправляемые типы