enum
自体ではなく値の属性を取得できるかどうかを知りたいですenum
。たとえば、次のようなものがあるとしますenum
。
using System.ComponentModel; // for DescriptionAttribute
enum FunkyAttributesEnum
{
[Description("Name With Spaces1")]
NameWithoutSpaces1,
[Description("Name With Spaces2")]
NameWithoutSpaces2
}
私が望むのは、列挙型を指定して、列挙文字列値とその説明の 2 組を生成することです。
価値は簡単でした:
Array values = System.Enum.GetValues(typeof(FunkyAttributesEnum));
foreach (int value in values)
Tuple.Value = Enum.GetName(typeof(FunkyAttributesEnum), value);
しかし、 を設定するために、説明属性の値を取得するにはどうすればよいでしょうかTuple.Desc
? 属性がenum
自体に属している場合は、その方法が考えられますが、 の値からそれを取得する方法がわかりませんenum
。
ベストアンサー1
これで必要な処理が完了するはずです。
try
{
var enumType = typeof(FunkyAttributesEnum);
var memberInfos =
enumType.GetMember(FunkyAttributesEnum.NameWithoutSpaces1.ToString());
var enumValueMemberInfo = memberInfos.FirstOrDefault(m =>
m.DeclaringType == enumType);
var valueAttributes =
enumValueMemberInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
var description = ((DescriptionAttribute)valueAttributes[0]).Description;
}
catch
{
return FunkyAttributesEnum.NameWithoutSpaces1.ToString()
}