[英]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.