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 に答える