在创建菜单期间,我在代码中使用了以下内容。变量跟踪当前的顶部和子菜单标题:
var topTitle = "";
var subTitle = "";
我可以用使用以下枚举的数组替换它们吗?
public enum MenuType {
TopMenu = 0,
SubMenu = 1
}
我假设我想要一个包含两个条目的字符串数组,但是如何设置它然后使用我的枚举引用数组内容?
在创建菜单期间,我在代码中使用了以下内容。变量跟踪当前的顶部和子菜单标题:
var topTitle = "";
var subTitle = "";
我可以用使用以下枚举的数组替换它们吗?
public enum MenuType {
TopMenu = 0,
SubMenu = 1
}
我假设我想要一个包含两个条目的字符串数组,但是如何设置它然后使用我的枚举引用数组内容?
这不适用于枚举,枚举将名称与 int 配对,它基本上是一种拥有一堆的奇特方式:
const int A = 0;
const int B = 1;
枚举的优点是您可以将它放在方法调用中,然后将方法的使用限制为仅在枚举中定义的 const 值。它还增加了代码的可读性。
要实现您正在寻找的内容,您需要一个 Dictionary 集合。
然后,您可以添加您的密钥对
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";
看看这是否会让你到达你想去的地方。key 和 value 的类型可以是任何类型,这是一个非常有用的集合系统。
哦,添加到您的使用中:
using System.Collections.Generic;
枚举值只是整数。您可以像使用整数一样使用它们。
所以这样做是正确的:
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 语句一样好。
我定义了一个测试类MenuTest
,它使用Dictionary和这个索引器:
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));