メモ書き
自前のカスタム属性
using System;
[AttributeUsage(AttributeTargets.Field, AllowMultiple =false, Inherited =false)]
public class AliasNameAttribute: Attribute
{
public AliasNameAttribute(string value)
{
this.AliasName = value;
}
public string AliasName { get; }
}
カスタム属性を持つEnumを定義する
public enum Fruits
{
[AliasName("リンゴ")]
Apple,
[AliasName("オレンジ")]
Orange,
[AliasName("ブドウ")]
Grape
}
別名を取得する拡張メソッドを作る
using System;
using System.Linq;
public static class AttributeExtention
{
public static string ToAliasName(this Enum value)
{
return value
.GetType()
.GetField(value.ToString())
.GetCustomAttributes(typeof(AliasNameAttribute), false)
.Cast<AliasNameAttribute>()
.FirstOrDefault()?.AliasName ?? value.ToString();
}
}
使い方
// Apple → リンゴ
var appleName = Fruits.Apple.ToAliasName();
// Orange → オレンジ
var orangeName = Fruits.Orange.ToAliasName();
// Grape → ブドウ
var grapeName = Fruits.Grape.ToAliasName();
↧