19245


# 概要

次のようなenumを用意していて、それに対しボタンから受け取った属性を識別子に値を呼ぶ方法を探しています。

・enum定義

[code]

    enum Name { あああ, いいい }
    
    static class NameUtil
    {
      public static string Type(this Name name)
      {
        string [] type = { "アアア", "イイイ" };
        return type[(int)name];
      }
    }
    
[/code]

・使用するクラスの一部

[code]

    private Click_Button(object sender, RoutedEventArgs e)
    {
      Button btn = (Button)sender;
      string name = (string)btn.Content;
    }
    
[/code]

ボタンのContentが「あああ」「いいい」となっているリストから任意のボタンをクリックし、使用するクラスで「あああ」から「アアア」を取得したいのですが、どう書けばいいかわかりません。

[code]

    Name.あああ.Type()
    
[/code]

の「あああ」の部分を動的に変化させて使いたいです。

よろしくお願いします。

# 環境

・.NET Frame Work 4.5  
・Visual Studio2013


CC BY-SA 3.0
2015-11-24T11:02:57.363
19244
2015-11-24T11:17:04.987
12459
question
c# .net
C#のenumで任意の識別子から値を呼ぶ方法を探しています。


このような場合、カスタム属性を使用します。

[code]

    class SomeAttribute : Attribute
    {
        public SomeAttribute(string type)
        {
            Type = type;
        }
        public string Type { get; set; }
    }
    
[/code]

以上のようなクラスを定義すれば、各フィールドに`SomeAttribute`カスタム属性を定義することが出居ます。

[code]

    enum Name
    {
        [Some("アアア")]
        あああ,
        [Some("イイイ")]
        いいい
    }
    
[/code]

このように定義を行っておけば実行時にフィールド名から`FieldInfo`を取得し、そこから`SomeAttribute`を取得することが可能です。

[code]

    var name = "あああ";
    var field = typeof(Name).GetField(name);
    var attrs = field.GetCustomAttributes(typeof(SomeAttribute), false);
    var some = (SomeAttribute)attrs[0];
    Console.WriteLine(some.Type);
    
[/code]


CC BY-SA 3.0
2015-11-24T11:17:03.127
19245
2015-11-24T11:17:03.127
5750
19244
answer

[code]

    var index = (int)Enum.Parse(typeof(Name), "あああ");
    
[/code]

でenumの値`0`が得られます。これを利用して配列にアクセスすることでしょうか。


CC BY-SA 3.0
2015-11-24T11:17:04.987
19246
2015-11-24T11:17:04.987
4236
19244
answer