DOBON.NETプログラミング道掲示板

[ 最新記事及び返信フォームをトピックトップへ ]

■33791 / inTopicNo.1)  C# enum命名規則の抜け道
  
□投稿者/ yuko 一般人(1回)-(2018/01/25(Thu) 00:34:17)
  • アイコン環境/言語:[Windows 10 / C# / .NET 4.5] 
    分類:[.NET] 

    今までは下記のようにenumに登録した名前でComboBoxにアイテムを追加してコードを書いていたのですが

    enum Fruits
    {
    りんご,
    みかん,
    いちご,
    }

    foreach (Fruits fruit in Enum.GetValues(typeof(Fruits)))
    {
    comboBox1.Items.Add(Enum.GetName(typeof(Fruits), fruit));
    }

    comboBox1.SelectedIndexChanged += (sender, e) =>
    {
    switch ((Fruits)((ComboBox)sender).SelectedIndex)
    {
    case Fruits.りんご:
    break;
    case Fruits.みかん:
    break;
    case Fruits.いちご:
    break;
    }
    };


    どうしてもenumに登録できない名前を使う必要がでてきてしまい、コードを下記のように変更しました。

    string[] Fruits = { "りんご", "みかん", "いちご" };

    foreach (string fruit in Fruits)
    {
    comboBox1.Items.Add(fruit);
    }

    comboBox1.SelectedIndexChanged += (sender, e) =>
    {
    switch (((ComboBox)sender).SelectedIndex)
    {
    case 0: // りんご
    break;
    case 1: // みかん
    break;
    case 2: // いちご
    break;
    }
    };


    しかしこれだと「りんご」を「林檎」に変更したときにswitch文の方のコメント「りんご」を変更し忘れてしまったり
    「りんご」と「みかん」の間に新しく「とまと」を入れるとswitch文の変更が面倒だったりとenumを使った方法より劣るような気がします。
    可能ならばenumを使った方法でやりたいのですが
    「りんご」→「001リンゴ」のように先頭に数字を付けたり
    「みかん」→「みかん(愛媛産)」」のようにカッコを付けたりしてもエラーにならないなんらかの回避方法はないでしょうか?

マルチポストを報告
違反を報告
引用返信 削除キー/
■33792 / inTopicNo.2)  Re[1]: C# enum命名規則の抜け道
□投稿者/ 魔界の仮面弁士 大御所(1103回)-(2018/01/25(Thu) 14:52:16)
  • アイコン2018/01/25(Thu) 15:01:56 編集(投稿者)

    No33791に返信(yukoさんの記事)
    > どうしてもenumに登録できない名前を使う必要がでてきてしまい、

    「enumに登録できない名前」というのは、具体的には
    > 「りんご」→「001リンゴ」のように先頭に数字を付けたり
    > 「みかん」→「みかん(愛媛産)」」のようにカッコを
    > 付けたりしてもエラーにならないなんらかの回避方法はないでしょうか?
    のことでしょうか。

    だとしたら、アンダーバーで代用してみては如何でしょう。
    「_001リンゴ」のように先頭にアンダーバーを付けたり、
    「みかん_愛媛産_」のようにするということです。

    プロジェクトのプロパティの「リソース」タブに
    既存のファイル(.txt とか .jpg とか)をドロップしたときに
    自動生成される『Properties.Resources.何某』プロパティも
    このルールで変換されています。



    > 可能ならばenumを使った方法でやりたいのですが
    属性を使うのは如何でしょう。
    https://qiita.com/soi/items/b79c376e49a252439940

    自分で属性をカスタマイズすれば、一つの列挙値に対して
    "リンゴ"、"りんご"、"林檎"、"Apple" といった
    複数の別名を与えることもできますよ。
違反を報告
引用返信 削除キー/
■33793 / inTopicNo.3)  Re[2]: C# enum命名規則の抜け道
□投稿者/ yuko 一般人(2回)-(2018/01/25(Thu) 22:17:13)
  • アイコン
    魔界の仮面弁士様、アドバイスありがとうございます。
    
    enumで「_001みかん_1_愛媛産_2_」のように定義しておき、
    不要部分を削除したり変換したりすることで概ね目的通りのことが出来るようになりました。
    
    foreach (Fruits fruit in Enum.GetValues(typeof(Fruits)))
    {
        string text = Enum.GetName(typeof(Fruits), fruit);
        text = text.Remove(0, 1);
        text = text.Replace("_1_", "(");
        text = text.Replace("_2_", ")");
        comboBox1.Items.Add(text);
    }
    

解決み!
違反を報告
引用返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

Mode/  Pass/


- Child Tree -