2

enumsのDBには次のようなものがあります:

「ランダムタイプ」、「ランダムタイプ1」、「NewRandom」

通常、次のような列挙型で値を表します。

enum myTypes
{
   Random Type = 0,...
}

しかし、これは不可能なので、クラスを使用してみました

static class myTypes
{
    public const string RandomType = "Random Type";
    public const string NewRandom = "NewRandom";
}

このように、クラスを のように使用できますが、Enumこれが可能な限り最良の実装であるかどうか疑問に思っています。それとも、スペースを確保するために作成Enumsすることはありますか?

ありがとう。

編集: 現在の実装に何か問題があるかどうかも知りたいです。現在の実装は、ここで提案されているほとんどのソリューションよりも優れていると感じています。

ありがとう

4

6 に答える 6

3

いいえ、できません。列挙型はタイプセーフなだけintです。

利用可能な解決策があり、私はそれがとても好きです。DescriptionAttributeを使用します。

次のように使用します。

static enum myTypes
{
    [Description("Random Type")]
    RandomType,
    [Descripton("New Random")]
    NewRandom
}

そして、この拡張メソッドも必要になります:

public static string GetDescription<T>(this T en) where T : struct, IConvertible
{
    Type type = typeof(T);
    if (!type.IsEnum)
    {
        throw new ArgumentException("The type is not an enum");
    }
    MemberInfo[] memInfo = type.GetMember(en.ToString());
    if (memInfo != null && memInfo.Length > 0)
    {
        object[] attrs = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
        if (attrs != null && attrs.Length > 0)
        {
            return ((DescriptionAttribute)attrs[0]).Description;
        }
    }
    return en.ToString();
}

そして、それで、これを行うことができます:

myTypes.RandomType.GetDescription();
于 2013-06-23T10:24:38.880 に答える
0

Typesafe Enumパターンを使用して目標を達成できます。

アイデアは、列挙型をクラスにラップすることです。私はこれがあなたが望むものだと思います -

public class MyTypes
{
    #region Enum Values

    public static MyTypes RandomType = new MyTypes(0, "Random Type");
    public static MyTypes NewRandom = new MyTypes(1, "New Random");

    #endregion

    #region Private members

    private int id;
    private string value;
    private MyTypes(int id, string value)
    {
        this.id = id;
        this.value = value;
    }

    #endregion

    #region Overriden members

    public override string ToString()
    {
        return value;
    }

    #endregion

    public static List<MyTypes> GetValues()
    {
        return new List<MyTypes>() { MyTypes.RandomType, MyTypes.NewRandom };
    }
}
于 2013-06-23T10:59:59.800 に答える