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>一个私有构造函数和一个公共嵌套抽象继承类, TempEnum ,以防止非枚举的继承版本。

请注意,你不能使用这个技巧来制作扩展方法。


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

上一篇: Enum type constraints in C#

下一篇: C# naming convention for enum and matching property