如何将枚举值强制转换为常量
本文关键字:转换 常量 枚举 | 更新日期: 2023-09-27 18:13:19
我有一个保存选项卡集合名称的枚举器。我想使用tabControl.SelectedIndexChanged
事件来执行基于选项卡的标题/名称的特定代码。
是否可以使用如下的switch语句:
private void tabControl2_SelectedIndexChanged(object sender, EventArgs e)
{
var tc = (TabControl)sender;
switch (tc.SelectedTab.Name)
{
case Enum.GetName(typeof(tabPages), 0):
// This is table page 0 , name="interchanges"
// set default values
break;
case Enum.GetName(typeof(tabPages), 1):
// Do something else page=1,name="ShowContents"
break;
}
}
您应该将字符串转换为enum。然后把这个调换一下。例子:
tabPages tab = (tabPages)Enum.Parse(typeof(tabPages),tc.SelectedTab.Name);
switch (tab)
{
case tabPages.interchanges:
// This is table page 0 , name="interchanges"
// set default values
break;
case tabPages.Showcontents:
// Do something else page=1,name="ShowContents"
break;
}
编辑:使这个例子非常快速:
using System;
public class Test
{
public static void Main()
{
string text = "One";
TestEnum test = (TestEnum)Enum.Parse(typeof(TestEnum), text);
switch (test)
{
case TestEnum.One:
Console.WriteLine("ONE!");
break;
case TestEnum.Two:
Console.WriteLine("TWO!");
break;
case TestEnum.Three:
Console.WriteLine("THREE!");
break;
}
}
public enum TestEnum
{
One,
Two,
Three
}
}
另一个建议,尽管可能更难维护:
将委托附加到每个页面的"标签"上,并让您的代码简单地调用该页上的任何委托。你的代码变成:
var tc = (TabControl)sender;
Action action = tc.Tag as Action;
if (action != null)
action();
另一种可能性是定义静态Dictionary<string, Action> myActions
,然后只调用
myActions[tabName]();