我想创建一个扩展方法,它将通过其键返回枚举值。 用法将是
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编译。
这甚至可能吗?
答案 0 :(得分:7)
没有静态扩展方法,这是你想要做的。您只能创建在类型实例中起作用的扩展方法,而不是类型本身。
答案 1 :(得分:5)
LifeCycle
的类型不是该枚举的实例。
所以这会编译:
LifeCycle.Pending.GetLifeCycle(1);
但是这个扩展无论如何都是毫无意义的,因为你可以直接得到它的int
值的枚举:
LifeCycle approved = (LifeCycle) 1;
答案 2 :(得分:1)
你只需要像这样投射:
var lifeCycle = (LifeCycle)1;
这里举个例子:
using System;
namespace Test
{
class Program
{
static void Main(string[] args)
{
var lifeCycle = (LifeCycle)1;
Console.WriteLine(lifeCycle);
//Output: Approved
}
}
public enum LifeCycle
{
Pending = 0,
Approved = 1,
Rejected = 2,
}
}