如何将枚举值强制转换为常量

本文关键字:转换 常量 枚举 | 更新日期: 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]();