そのようなものはうまくいくかもしれません:
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 属性を配置することはできないため、文字列だけを返す可能性があると思います。