enum を利用している際に、日本語名を表示したいことがある
普通に処理を記述すると、swtich を使って処理を書くが
Attribute を利用して日本語名を追加することもできる
コード
まずは、enum のフィールドに使う Attribute を定義、必要なのは別名なので string のフィールドだけ定義する
using System; [AttributeUsage(AttributeTargets.Field)] public class EnumNameAttribute : Attribute { public string Name; public EnumNameAttribute(string name) { Name = name; } }
あとは、名前に変換するための拡張メソッドを定義、これで enum.Name()
と記述すると
名前が定義されていた場合表示される
using System.Linq; using System.Reflection; public static class EnumExtension { public static string Name(this Enum self) { #if UNITY_EDITOR #endif var type = self.GetType(); var field = type.GetField(self.ToString()); var ca = field.GetCustomAttributes(typeof(EnumNameAttribute)); if (!ca.Any()) return self.ToString(); var na = ca.First() as EnumNameAttribute; return na.Name; } }
サンプル
public enum MyEnum { [EnumName("りんご")] Apple, }
// りんご と表示される
Console.Write(MyEnum.Apple.Name());