0

属性を取得するためのこのenum拡張メソッドを見てください。Description

public static string GetDescription(this Enum enumValue)
{
    var memberInfo = enumValue.GetType().GetMember(enumValue.ToString());

    if (memberInfo.Length < 1)
        return null;

    var attributes = memberInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);

    return attributes.Length > 0 ? ((DescriptionAttribute)attributes[0]).Description : enumValue.ToString();
}

属性enumの例:Description

public enum Colors
{
    [Description("Navy Blue")]
    Blue,
    [Description("Lime Green")]
    Green
}

最後に、拡張メソッドの使用法:

var blue = Colors.Blue;
Console.WriteLine(blue.GetDescription());
// Console output: Navy Blue

私の質問は、enumsに関してはif (memberInfo.Length < 1)チェックが必要ですか?から返された配列GetMember()が空になることはありenumますか? 次のように空を宣言できることを知っていますenum

public enum Colors
{
}

しかし、型の変数を作成できるかどうかはわかりませんColors...

var green = Colors. // What goes here?

チェックを削除しif (memberInfo.Length < 1)たいのですが、後で問題が発生する場合は削除したくありません (空enumの が必要になる理由は思いつきませんが、他の開発者はおそらくGetDescription()拡張メソッドを使用するでしょう) 。 .

4

1 に答える 1

3

Colors値が定義されていなくても、タイプの変数を作成できます。

public enum Colors { }

var color2 = (Colors)100; // with casting
Colors color2 = default; // default value '0'
于 2018-07-19T14:46:54.030 に答える