によってカスタムで列挙型を取得することができた例がたくさんあります問題は、とattributeTypeすなわちをハードコーディングする必要があり、ここで Get Enum from Description attribute取得列挙型カスタム属性(ジェネリック)
public static class EnumEx
{
public static T GetValueFromDescription<T>(string description)
{
var type = typeof(T);
if(!type.IsEnum) throw new InvalidOperationException();
foreach(var field in type.GetFields())
{
var attribute = Attribute.GetCustomAttribute(field,
typeof(DescriptionAttribute)) as DescriptionAttribute;
if(attribute != null)
{
if(attribute.Description == description)
return (T)field.GetValue(null);
}
else
{
if(field.Name == description)
return (T)field.GetValue(null);
}
}
throw new ArgumentException("Not found.", "description");
// or return default(T);
}
}
しかし、ここのような属性typeof(DescriptionAttribute)) as DescriptionAttribute
この例をGeneric Extensionに変換して、CustomAttributeTypeをハードコードする必要はありません。
でそれを使用しますが、あなたが知っておくべきそれを使用して検索できる入力パラメータの意味と使用方法たとえば、この基準を 'if(attribute.Description == description)'とすることができますが、ジェネリックパラメータを渡したときはどうでしょうか? –
これをどのように翻訳しますか? 'attribute'が' DescriptionAttribute'でないなら 'attribute.Description'ですか? – HimBromBeere