如何在枚举上创建扩展方法(c#)

时间:2013-03-11 13:53:56

标签: c# enums extension-methods

我想创建一个扩展方法,它将通过其键返回枚举值。 用法将是

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编译。

这甚至可能吗?

3 个答案:

答案 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,
    }
}