1. ホーム
  2. c#

[解決済み] Enumの値の属性の取得

2022-03-18 11:09:49

質問

の属性を取得することは可能でしょうか? enum の値ではなく enum を使うのでしょうか?例えば、次のようなものがあったとします。 enum :

using System.ComponentModel; // for DescriptionAttribute

enum FunkyAttributesEnum
{
    [Description("Name With Spaces1")]
    NameWithoutSpaces1,    
    [Description("Name With Spaces2")]
    NameWithoutSpaces2
}

私が欲しいのは、enum 型が与えられたら、enum 文字列値とその説明の 2 タプルを生成することです。

値は簡単でした。

Array values = System.Enum.GetValues(typeof(FunkyAttributesEnum));
foreach (int value in values)
    Tuple.Value = Enum.GetName(typeof(FunkyAttributesEnum), value);

しかし、description 属性の値を取得し、それを Tuple.Desc ? その属性が enum の値からどのように取得するのか、困っています。 enum .

解決方法は?

これで、必要なことができるはずです。

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()
}