Нет способа статически поддерживать универсальный параметр, который имеет только фиксированный определенный размер.Ограничения ограничены интерфейсами, ref / struct, базовым классом и new
.
Что вы можете сделать, так это использовать статические фабричные методы, чтобы ограничить использование универсальных типов известным конечным набором подходящих типов.Например,
class DataStructure<T> {
private DataStructure(T value) {
...
}
}
static class DataStructure {
public static DataStructure<int> Create(int i) {
return new DataStructure<int>(i);
}
public static DataStructure<char> Create(char c) {
return new DataStructure<char>(c);
}
}
Это ограничивает, поскольку требует, чтобы вы заранее перечислили все сопоставимые типы.Если вы хотите более гибкое решение, которое работает с пользовательскими типами, вам необходимо реализовать проверку во время выполнения.
public static DataStructure<T> Create<T>(T value) {
RuntimeVerification(typeof(T));
return new DataStructure<T>(value);
}