C#中的枚举类型约束
可能重复:
任何人都知道缺乏枚举通用约束的一个很好的解决方法?
C#背后的原因是不允许Enum
的类型限制? 我确信疯狂背后有一种方法,但我想明白为什么这是不可能的。
以下是我希望能够做到的(理论上)。
public static T GetEnum<T>(this string description) where T : Enum
{
...
}
这是偶尔要求的功能。
正如我所指出的那样,除非有人设计,规格说明,实现,测试,文档和发布该功能,否则所有功能都未实现。 到目前为止,没有人为此做过这件事。 没有特别不寻常的原因,为什么不。 我们还有很多其他的事情要做,预算有限,而这个从来没有超过“这不好过吗?” 在语言设计团队中进行讨论。
CLR不支持它,所以为了使它工作,除了语言工作之外,我们还需要做运行时工作。 (见答案评论)
我可以看到有一些体面的使用案例,但没有一个是如此引人注目以至于我们会做这项工作,而不是其他数百个要求更频繁的其他功能之一,或者更具吸引力和更远的效果用例。 (如果我们想要使用这些代码,我个人会优先考虑委托约束的方式,就像枚举约束的方式一样。)
事实上,这是可能的,一个丑陋的伎俩。 但是,它不能用于扩展方法。
public abstract class Enums<Temp> where Temp : class {
public static TEnum Parse<TEnum>(string name) where TEnum : struct, Temp {
return (TEnum)Enum.Parse(typeof(TEnum), name);
}
}
public abstract class Enums : Enums<Enum> { }
Enums.Parse<DateTimeKind>("Local")
如果你愿意,你可以给Enums<Temp>
一个私有构造函数和一个公共嵌套抽象继承类, Temp
为Enum
,以防止非枚举的继承版本。
请注意,你不能使用这个技巧来制作扩展方法。
public static T GetEnum<T>(this string description) where T : struct
{
return (T)Enum.Parse(typeof(T), description);
}
它回答你的问题吗?
链接地址: http://www.djcxy.com/p/54415.html