gpt4 book ai didi

c# - 将泛型类型参数限制为 System.Enum

转载 作者:太空狗 更新时间:2023-10-30 00:11:15 25 4
gpt4 key购买 nike

我有一个应该用 Enum 类型指定的泛型类型(实际上,它是几个指定的枚举之一,但我将满足于 System.Enum) .

当然,编译器会拒绝这样的代码:

class Generic<T> where T : Enum {}

“约束不能是特殊类‘System.Enum’”异常。

到目前为止我能想到的唯一解决方案是使用静态类型初始值设定项来检查类型参数,如果它实际上不是枚举,则抛出异常,如下所示:

class Generic<T> 
{
static Generic()
{
if (typeof(T).BaseType != typeof(Enum))
throw new Exception("Invalid Generic Argument");
}
}

这至少为我提供了运行时安全性,我们不会将其与非枚举参数一起使用。然而,这感觉有点 hacky,那么有没有更好的方法来实现这一点,最好是使用编译时构造?

最佳答案

您可以使用 Jon Skeet's Unconstrained Melody项目来做到这一点。

使用 Unconstrained Melody 你会写:

class Generic<T> where T : IEnumConstraint

这会完成同样的事情。

More info about Unconstrained Melody with usage examples.

关于c# - 将泛型类型参数限制为 System.Enum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14160669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com