C#の使用各列挙型アイテムのプロパティを関連付けることは可能ですか?c#enumオブジェクトにカスタムプロパティを追加することはできますか?
私はを使用して、enum
アイテムに英語の説明を追加しました。私は、次の
public enum MyEnum
{
[Description("My First Item")]
First,
[Description("My Second Item")]
Second,
[Description("My Third Item")]
Third
}
を行っている各項目に英語の説明を追加するには
は、それから私は私がそう
public static string GetDescription(this Enum value)
{
Type type = value.GetType();
string name = Enum.GetName(type, value);
if (name != null)
{
FieldInfo field = type.GetField(name);
if (field != null)
{
DescriptionAttribute attr = Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)) as DescriptionAttribute;
if (attr != null)
{
return attr.Description;
}
}
}
return name;
}
のような説明を取得することができますGetDescription()
と呼ばれる私のenum
に拡張メソッドを追加しましたただし、クラスを割り当てたり、新しいオブジェクトを作成したりすることができれば、多くの助けになります。
これは可能ですか?次のようなことをするにはどうすればよいですか?
public enum MyEnum
{
[Description("My First Item"), new { IsFirst = true, UnitType = 1}]
First
}
やクラスを使用して
public enum MyEnum
{
[Description("My First Item"), new MyCustomClass(true, 1)]
First
}
あなた自身のカスタム属性クラスを作成できます(https://docs.microsoft.com/en-us/dotnet/standard/attributes/writing-custom-attributes)。 – Leandro
この時点で、enumを使用する代わりにポリモフィズムを使用するべきではありませんか? –
列挙型は本質的に整数で、あなたはint型、文字列型、クラス型を格納したいので、 'Tuple tuple = new Tuple (1、" First Item "、新しいMyCustomClass true、1)); ' –