うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【C#】enum に名前をつける

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