Если у меня есть универсальный интерфейс с ограничением struct
, например:
public interface IStruct<T> where T : struct { }
Я могу предоставить перечисление как мой тип T
, например, так как enum
удовлетворяет struct
ограничение:
public class EnumIsAStruct : IStruct<DateTimeKind> { }
C # 7.3 добавлено Enum
ограничение .Следующий код, который ранее был недопустим, теперь компилируется:
public class MCVE<T> : IStruct<T> where T : struct, Enum { }
Однако, к моему удивлению, следующее не удается скомпилировать:
public class MCVE<T> : IStruct<T> where T : Enum { }
... с ошибкой
CS0453 Тип 'T' должен быть необнуляемым типом значения, чтобы использовать его в качестве параметра 'T' в универсальном типе или методе 'IStruct'
Почемуэто?Я ожидал бы, что универсальный тип, ограниченный Enum
, будет использоваться в качестве аргумента типа, где тип ограничен struct
, но это, похоже, не так - мне нужно изменить мое ограничение Enum
на struct, Enum
.Мои ожидания неверны?