簡體   English   中英

如何在C#中使switch語句通用

[英]how to make switch statement generic in c#

我想在c#中使用switch語句。 但是我不想在case表達式中使用常量,而是要使用枚舉值。 我該如何使用。 如果我嘗試像這樣使用它:

 string strPageMode=...//some value;
 switch (strPageMode)
 {
     case ModesEnum.SystemHealth:
     //some code
     break;
}

給出錯誤。 那要用什么呢? 我不想使用If語句。

如果它是一個字符串,那么它將起作用:

ModesEnum res;

//Implicit generic as opposed to Enum.Parse which returns object
Enum.TryParse(strPageMode, out res); //returns false if parsing failed

switch (res)
{
    case ModesEnum.SystemHealth:
        break;
}

如前所述,通用的TryParse< .Net 4.0不可用。 否則,請使用Enum.Parse

如何聲明strPageMode 它必須是ModesEnum的實例,我猜它是一個字符串。

假設strPageMode表示strPageMode的一個可能值的名稱,則可以執行以下操作:

switch (Enum.Parse(typeof(ModesEnum), strPageMode, false))
{
    ... as before
}

枚舉文字(而不是該枚舉類型的變量的當前值) 一個常量。

在.NET中,“通用”一詞有特定含義,而在英語中則具有一般意義。 我不明白這與這有什么關系。

基於准匈牙利名稱,我猜測strPageMode是一個字符串(請告訴我,您實際上並沒有像C#代碼中那樣命名變量)。 將switch視為一組if-else語句的語法糖,這意味着您正在字符串和枚舉之間進行相等比較。 如果允許這樣做,那將是毫無意義的,因為字符串是字符串,而枚舉是枚舉,無論它們的值是什么,它們本質上永遠不會相等。

您需要將字符串解析為ModesEnum值,並在switch語句中使用它,或者使用ModesEnum.SystemHealth.ToString()將大小寫值字符串設置為字符串。

在我的一個項目中,我以類似的方式使用了開關盒。

switch(UserType)
{
   case User.Guest:
            break;
}

這里的UserType是一個字符串,而User是枚舉。 它為我工作。

暫無
暫無

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

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