【发布时间】:2013-03-11 13:53:55
【问题描述】:
我想创建一个扩展方法,该方法将通过其键返回一个枚举值。 用法将是
LifeCycle.GetLifeCycle(1)
或 LifeCycle.GetLifeCycleByValue("")
这就是我的想法 - 假设我有以下枚举:
public enum LifeCycle
{
Pending = 0,
Approved = 1,
Rejected = 2,
}
我为 getByint 案例编写了以下扩展
public static class EnumerationExtensions
{
private static Dictionary<int, LifeCycle> _lifeCycleMap = Enum.GetValues(typeof(LifeCycle)).Cast<int>().ToDictionary(Key => Key, value => ((LifeCycle)value));
public static LifeCycle GetLifeCycle(this LifeCycle lifeCycle, int lifeCycleKey)
{
return _lifeCycleMap[lifeCycleKey];
}
}
到目前为止
LifeCycle.GetLifeCycle(1)
不编译。
这可能吗?
【问题讨论】:
-
其实你可以不写代码直接使用
var foo = (LifeCycle)1;。不是很满意吗? -
@Jon 不同之处在于,如果你给它一个无效的值,它会正常工作,而不是抛出异常。这可能是可取的,也可能是不可取的。
-
@Servy:当然。但是您可以编写一个
EnsureValid(this LifeCycle lc)方法,如果Enum.HasValue(lc.GetType(), lc)是false,如果这是问题所在。 -
这是一般情况。我也希望能够做到这一点。我会尽快更新问题
标签: c# enums extension-methods