之间有什么区别
class Example<TEnum> where TEnum : struct, Enum
class Example<TEnum> where TEnum : Enum
很抱歉,如果这是一个愚蠢的问题,我只想理解。
Enum
约束已在C#7.3中添加。struct
约束要老得多。它可能是实现的工件,但Enum
约束本身并不意味着struct
。
枚举约束的奇怪之处
Enum
约束有一个非常有趣的警告:该约束本身并不意味着T
是一个结构。此外,您实际上可以将Enumconstraint与class
约束相结合:// The only valid TEnum type is `System.Enum` public static void Foo<TEnum>() where TEnum : class, Enum { } static void Main(string[] args) { // Error 'EnumLong' must be a class Foo<EnumLong>(); // Ok, but why would you do that?!?!? Foo<System.Enum>();
组合
where TEnum: class, Enum
毫无意义,使用Enum
约束的唯一合理方式是将其与struct
约束一起使用:where TEnum: struct, Enum
。
https://devblogs.microsoft.com/premier-developer/dissecting-new-generics-constraints-in-c-7-3/