5

列挙型の値のリストを取得するにはどうすればよいですか?

たとえば、次のものがあります。

public enum ContactSubjects
{
    [Description("General Question")]
    General,
    [Description("Availability/Reservation")]
    Reservation,
    [Description("Other Issue")]
    Other
}

私ができる必要があるのは、ContactSubject.General を引数として渡すことであり、説明のリストを返します。

このメソッドは、ContactSubject (私の例では) だけでなく、任意の Enum で動作する必要があります。署名は GetEnumDescriptions(Enum value) のようなものにする必要があります。

4

1 に答える 1

9

そのようなものはうまくいくかもしれません:

    private static IEnumerable<string> GetDescriptions(Type type)
    {
        var descs = new List<string>();
        var names = Enum.GetNames(type);
        foreach (var name in names)
        {
            var field = type.GetField(name);
            var fds = field.GetCustomAttributes(typeof(DescriptionAttribute), true);
            foreach (DescriptionAttribute fd in fds)
            {
                descs.Add(fd.Description);
            }
        }
        return descs;
    }

ただし、そこでいくつかのロジックを確認することもできます。たとえば、名前の開始は問題ありませんか? 複数の説明属性をどのように処理しますか? それらのいくつかが欠落している場合はどうなりますか? 名前が必要ですか、それとも上記のようにスキップしますか? 等

あなたの質問を見直しました。VALUE の場合は、次のようになります。

private static IEnumerable<string> GetDescriptions(Enum value)
{
    var descs = new List<string>();
    var type = value.GetType();
    var name = Enum.GetName(type, value);
    var field = type.GetField(name);
    var fds = field.GetCustomAttributes(typeof(DescriptionAttribute), true);
    foreach (DescriptionAttribute fd in fds)
    {
        descs.Add(fd.Description);
    }
    return descs;
}

ただし、1 つのフィールドに 2 つの Description 属性を配置することはできないため、文字列だけを返す可能性があると思います。

于 2012-10-24T23:05:43.337 に答える