可能重复:
任何人都知道缺少枚举通用约束的好方法?
C#不允许对Enums 进行类型约束的原因是什么?我确信疯狂背后有一种方法,但我想明白为什么不可能.
以下是我希望能够做到的(理论上).
public static T GetEnum<T>(this string description) where T : Enum
{
...
}
Run Code Online (Sandbox Code Playgroud)
SLa*_*aks 146
实际上,这可能是一个丑陋的伎俩.但是,它不能用于扩展方法.
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")
Run Code Online (Sandbox Code Playgroud)
如果您愿意,可以Enums<Temp>使用Tempas 提供私有构造函数和公共嵌套抽象继承类Enum,以防止非枚举的继承版本.
请注意,您不能使用此技巧来制作扩展方法.
Eri*_*ert 92
这是偶尔要求的功能.
正如我喜欢指出的那样,所有功能都没有实现,直到有人设计,规格,工具,测试,文档和发布功能.到目前为止,没有人为此做过.没有特别不寻常的原因; 我们还有许多其他的事情要做,预算有限,而且这个从来没有超越过"这不是很好吗?" 语言设计团队的讨论.
CLR不支持它,所以为了使它工作,除了语言工作之外,我们还需要做运行时工作. (见答复评论)
我可以看到有一些不错的使用案例,但没有一个是如此引人注目,以至于我们做这项工作,而不是更频繁要求的数百个其他功能之一,或者更具吸引力和更远的功能用例.(如果我们要使用这段代码,我会亲自优先考虑委托约束方式,就像枚举约束一样.)
And*_*doi 16
public static T GetEnum<T>(this string description) where T : struct
{
return (T)Enum.Parse(typeof(T), description);
}
Run Code Online (Sandbox Code Playgroud)
它能回答你的问题吗?
IL编织使用ExtraConstraints
public static T GetEnum<[EnumConstraint] T>(this string description)
{
...
}
Run Code Online (Sandbox Code Playgroud)
public static T GetEnum<T>(this string description) where T : Enum
{
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
53885 次 |
| 最近记录: |