簡體   English   中英

如何將枚舉值轉換為常量 c#

[英]How to cast Enum value as a constant c#

我有一個包含標簽頁集合名稱的枚舉器。 我想使用tabControl.SelectedIndexChanged事件根據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;
    }
}

您應該將字符串轉換為枚舉。 然后切換這個。 例子:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM