限制通用功能仅适用于枚举

And*_*nck 4 c#

我有以下通用功能:

public SomeType SomeFunction<T>(T value)
{
}
Run Code Online (Sandbox Code Playgroud)

我现在想限制这个泛型函数只用于Enums,所以我尝试了以下内容:

public SomeType SomeFunction<T>(T value) where T : System.Enum
{
}
Run Code Online (Sandbox Code Playgroud)

但这导致:

错误CS0702:约束不能是特殊类'System.Enum'

是否存在好奇心的工作是否有人知道为什么不允许这种类型的约束?

Ste*_*ven 5

你不能.您可以将其限制为值类型,但这就是全部.将其限制为枚举只能使用运行时检查来完成:

public SomeType SomeFunction<T>(T value) where T : struct
{
    if (!typeof(T).IsEnum)
    {
        throw new NotSupportedException("Only enums are supported.");
    }
}
Run Code Online (Sandbox Code Playgroud)