泛型类型约束'struct, Enum'和"枚举"之间的区别?



之间有什么区别

  • 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/

最新更新