我在声明数组的元素编号时可以使用Enums吗?

时间:2012-10-14 00:20:41

标签: c#

我在创建菜单时在代码中使用以下内容。变量跟踪 当前的顶级和子菜单标题:

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

我可以用使用以下枚举的数组替换它们吗?

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

我假设我想要一个包含两个条目的字符串数组,但是如何设置它然后引用 数组内容使用我的枚举?

3 个答案:

答案 0 :(得分:1)

它不会使用枚举,枚举将名称与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;

答案 1 :(得分: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语句一样好。

答案 2 :(得分:0)

我定义了一个测试类MenuTest,它使用Dictionarythis indexer

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