2

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

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) 

不编译。

这甚至可能吗?

4

3 回答 3

7

没有静态扩展方法之类的东西,这是您正在尝试做的。您只能创建在类型实例中起作用的扩展方法,而不是类型本身。

于 2013-03-11T13:55:49.980 回答
5

LifeCycle是类型而不是该枚举的实例。

所以这将编译:

LifeCycle.Pending.GetLifeCycle(1);

但是这个扩展无论如何都是没有意义的,因为你可以int直接通过它的值获得一个枚举:

LifeCycle approved = (LifeCycle) 1;
于 2013-03-11T13:56:48.153 回答
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,
    }
}
于 2013-03-11T14:00:49.263 回答