1

メニューの作成中にコードで次を使用しています。変数は、現在のトップ メニューとサブ メニューのタイトルを追跡します。

        var topTitle = "";
        var subTitle = "";

これらを次の Enum を使用する配列に置き換えることはできますか?

public enum MenuType {
    TopMenu = 0,
    SubMenu = 1
}

2 つのエントリを持つ文字列の配列が必要だと思いますが、これを設定して、列挙型を使用して配列の内容を参照するにはどうすればよいですか?

4

3 に答える 3

1

これはenumでは機能しません。enumは名前とintをペアにします。これは、基本的に次のような素晴らしい方法です。

const int A = 0;
const int B = 1;

列挙型の利点は、メソッド呼び出しに配置できることです。これにより、メソッドの使用が列挙型で定義したconst値のみに制限されます。また、コードに読みやすさを追加します。

探しているものを実現するには、辞書コレクションが必要です。

次に、キーペアを追加できます

Dictionary<String, String> titles = new Dictionary<String, String>();
titles.Add("topMenu", "Name of my top menu");
titles.Add("subMenu", "Name of my sub menu");

次に、次の方法で値を変更できます。

titles["topMenu"] = "New name of my top menu";
titles["subMenu"] = "New name of my sub menu";

それがあなたがなりたい場所にあなたを連れて行くかどうか見てください。キーと値のタイプは何でもかまいません。これは非常に便利な収集システムです。

ああ、そしてあなたの用途に追加してください:

using System.Collections.Generic;
于 2012-10-14T00:34:44.100 に答える
0

列挙値は単なる整数です。整数を使用する場合と同じように使用できます。

したがって、これは正しいです:

public enum MenuType {
    TopMenu = 0,
    SubMenu = 1
}

string[] menuLabels = new string[]{"Name Top Menu", "Name Sub Menu"}:


menuLabels[MenuType.TopMenu] // A cast may be necessary here, not sure.

もちろん、これは列挙型を使用する最良の方法ではありませんが、switch ステートメントを使用するのと同じくらい良い方法です。

于 2012-10-14T00:48:04.247 に答える
0

DictionaryこのインデクサーMenuTestを使用するテスト クラスを定義しました。

public class MenuTest
{
    Dictionary<MenuType, string> myarray;

    public MenuTest()
    {
        myarray = new Dictionary<MenuType, string>();
    }

    public string this[MenuType index]
    {
        get
        {
            if (myarray.ContainsKey(index))
                return myarray[index];
            else
                return null;
        }
        set
        {
            myarray[index] = value;
        }
    }
}

したがって、次のように使用できます。

MenuTest t = new MenuTest();
t[MenuType.TopMenu] = "topmenu";
t[MenuType.SubMenu] = "submenu";
Console.WriteLine(t[MenuType.TopMenu]);
Console.WriteLine(t[MenuType.SubMenu]);

または、文字列の配列に拡張メソッドを使用して、enun から int へのキャストを行うこともできます。

public static string GetMenuByType(this string[] menu, MenuType type)
{
    int index = (int)type;
    if (menu.Length > index)
        return menu[index];
    else
        return null;
}

そしてそれを使用します:

 string[] menu = new string[] { "topmenu", "submenu" };
 Console.WriteLine(menu.GetMenuByType(MenuType.TopMenu));
于 2012-10-14T02:10:44.403 に答える