泛型类型约束‘struct, Enum’与‘Enum’的区别是什么?
两种枚举泛型约束的差异
这两种写法的核心差异在于对TEnum的限定严格程度不同:
class Example<TEnum> where TEnum : struct, Enum
这是C# 7.3起专门用于限定枚举类型的约束组合。struct确保TEnum是值类型,Enum约束进一步把范围缩小到枚举类型——因为C#里所有枚举都是值类型且继承自System.Enum,但其他值类型(比如int、bool)并不继承Enum,所以这个组合能严格限制TEnum必须是枚举类型,完全排除传入非枚举值类型或引用类型的可能。class Example<TEnum> where TEnum : Enum
单独使用Enum约束的话,TEnum的范围更宽泛:它可以是任意继承自System.Enum的类型,包括Enum抽象类本身(引用类型)、具体的枚举类型(值类型),甚至Nullable<枚举类型>(可空值类型)。这意味着你可以传入Enum类型的变量(比如Enum someEnum = DayOfWeek.Monday;),而第一种约束会直接编译报错,因为Enum是引用类型,不符合struct要求。
简单来说,第一种是精准限定枚举类型,第二种则允许所有与Enum相关的类型,包括枚举的基类本身。
内容的提问来源于stack exchange,提问作者kitloy
相关产品推荐
相关产品推荐

