如何为所有枚举类型创建一个静态扩展方法?
我在尝试创建一个静态扩展方法,它可以用于C#的任意枚举类型。我希望能够在任意一个枚举值上调用这个方法。
然而,由于扩展方法是为特定类型定义的,我不确定如何创建一个泛型扩展方法,适用于所有枚举类型。是否可以通过扩展块来实现?
现在我可以只为某个特定枚举定义方法:
extension(MyEnum)
{
public static Direction Random => Enum.GetValues<MyEnum>().Choice();
}
但我想要像下面这样的:
extension<T>() where T : Enum
{
public static T Random => Enum.GetValues<T>().Choice();
}
解决方案
你的语法和泛型约束都略有偏差:
- 你仍然需要把要扩展的类型放在括号内,也就是
extension<T>(T) - 你还需要将
T约束为不可为空的值类型(以便调用Enum.GetValues<T>(),因此where T : struct, Enum
这段代码可以编译(前提是存在一个合适的 Choice 方法):
public static class Extensions
{
extension<T>(T) where T : struct, Enum
{
public static T Random => Enum.GetValues<T>().Choice();
}
}
不过我建议把它做成方法,而不是属性。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。