2010-11-19 95 views
14
時使用從Enum需要一個INT鑄造

誰能告訴我爲什麼我需要轉換。如果我從我的枚舉C#:爲什麼在一個switch語句?枚舉是整數

 switch (Convert.ToInt32(uxView.SelectedValue)) 
     { 
      case (int)ViewBy.Client: 

INT刪除演員(int)它失敗,並說我必須使用演員。

這是我的枚舉,枚舉是整數....任何人都知道這個?

public enum ViewBy 
    { 
     Client, 
     Customer 
    } 

回答

9

在C#enum s不只是數字。相反,它們是與上下文中的名稱相關聯的數字或數字。

爲了避免case報表蒙上,你可以在switch做投:

switch((ViewBy)Convert.ToInt32(uxView.SelectedValue)) 

然而,這有它自己的問題。例如,這段代碼將寫出7到控制檯。

enum ViewBy 
{ 
    ChuckNorris = 1, 
    JamesBond 
} 

Console.WriteLine((ViewBy)7); 
+0

偉大..謝謝..那工作! – Martin 2010-11-22 02:08:51

+4

它的問題將是什麼?!?!?請告訴 – 2013-04-05 20:15:07

+1

@ jordan.peoples如果您還有興趣,請參閱我的更新。晚些時候再好,永遠不會,呵呵:) – 2016-10-01 08:21:05

4

您應該使用Enum.Parse將字符串值轉換爲枚舉值。

ViewBy selected = (ViewBy) Enum.Parse(typeof(ViewBy), uxView.SelectedValue);   
switch (selected) 
{ 
    case ViewBy.Client: 
    // etc. 
} 

此外,枚舉的基礎類型不一定需要是Int32。

2

Enumsints在.NET類型系統!
該框架將它們存儲與離散整數值的援助 - 這是一個不同的事情...

托馬斯

2

MSDN

switch (expression) 
     case constant-expression : statement 
    [default : statement] 

在每種情況下 的常數表達式標籤轉換爲 表達式的類型,並與 表達式進行比較,表達式爲。控制 傳遞給條件爲 常量表達式與表達式的值 匹配的語句。

沒有從枚舉到int的隱式轉換,因此您的每個case都需要顯式轉換。但請注意,最初打開正確類型的表達式比投射每個案例更有意義(請參閱Enum.Parse)。

0

我想在這種情況下看起來有點跛腳,有一個int和所有的轉換。

假設你傳遞一個int,而不是一個枚舉,該方法,記住:

  1. 你要記錄得很清楚,以便隨時取消以後你會能夠修復或增強系統?
  2. 這個枚舉不在其他地方使用嗎?(關於如何處理相同信息的模式是不讓青少年犯錯或失去自己的關鍵。)

如果兩個答案都是否定的,那麼你應該考慮爲了它而保留它在不久的將來,你自己的理智。

而順便說一句,轉換爲int並將其與另一個int進行比較比每個示例的字符串都要簡單。

0

在回答這個問題:「誰能告訴我,爲什麼我需要轉換從我的枚舉INT」 ......

你必須強制轉換爲整數,因爲枚舉值不是整數。枚舉有一個可以作爲整型存儲的基礎值(默認爲int)。

您可以確定底層類型與

Enum.GetUnderlyingType(typeof(ViewBy)); 

你可以找到更多的細節herehere

0

爲什麼你需要投在所有的詮釋? 如果uxView.SelectedValue是一個ViewBy枚舉,那麼簡單的(ViewBy)uxView.SelectedValue就夠了嗎?

+0

這聽起來像'SelectedValue'是一個'字符串'在這裏 – 2010-11-19 13:29:56

相關問題