我想創建一個擴展方法,該方法將通過鍵返回一個枚舉值。 的使用將是如何在枚舉上創建擴展方法(c#)
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)
doenst compile。
這可能嗎?
實際上,你可以編寫* no code *,並使用'var foo =(LifeCycle)1;'。這不是令人滿意的嗎? – Jon 2013-03-11 13:58:05
@Jon不同的是,如果你給它一個無效的值,它會工作得很好,而不是拋出異常。這可能會或可能不會令人滿意。 – Servy 2013-03-11 14:04:31
@Servy:當然。但是如果這是問題,你可以編寫'EnValid(this LifeCycle lc)'方法,該方法在Enum.HasValue(lc.GetType(),lc)'爲'false'時拋出。 – Jon 2013-03-11 14:08:23