2017-08-01 37 views
-5

我有這個枚舉它如何工作enum C#?

public enum EstadoPeticion : int 
{ 
    PeticionCreada = 1, 
    PorValidar = 2, 
    Validada = 3, 
    Error = 0  
} 

使用枚舉我要做

(int)EstadoPeticion.PeticionCreada 

我爲什麼要投的類型和如何創建不使用投枚舉類型?,我覺得劇組可以是一個不好的做法

+3

*「我必須做」* - 做什麼?在正確使用時,你當然不必將枚舉強制轉換爲整數。 – poke

+0

爲什麼你必須這樣做?你爲什麼認爲這是一個不好的做法? –

+0

如果我想要做類似這樣的事情:IdEstadoPeticion = EstadoPeticion.PeticionCreada它總是需要強制轉換IdEstadoPeticion = **(int)** EstadoPeticion.PeticionCreada, – Fabian

回答

1

鑄造不是直接不好的做法。這是一個氣味 ...有跡象可能潛在不好的做法在附近的某處。

在這種情況下,潛在的不良做法是將Enumint根本進行比較。這通常(並非總是)表明您的設計出現其他問題,int值也許應該是Enum,或者您應該使用不同的機制來表示此數據。

而且,再次,它可能會很好。

一個很好的例子是使用數據庫,您需要將Enum作爲int存儲在數據庫表中。保存數據時,您會將Enum轉換爲int,並在檢索數據時將int轉換爲Enum。在這些情況下,演員陣容既合適又需要。

1

鑄造沒有錯(這不是壞習慣)。如果你想使用枚舉作爲整數,你必須總是投射,這就是枚舉的工作方式。雖然你不一定需要拋出枚舉,因爲你大多應該比較枚舉之間的枚舉。


喜歡本作例子:

if (myenum == PeticionCreada) { 

} 
0

你不需要投枚舉。如果你想在誤差爲0,你可以這樣做:

public enum EstadoPeticion  
{ 
    Error = 0, 
    PeticionCreada, 
    PorValidar, 
    Validada 
} 

值的其餘部分將通過1自動遞增。

+0

但如果我想分配這個值一些int它總是有必要使用一個強制轉換? – Fabian

+0

如果要使用與枚舉成員關聯的整數值,則必須進行強制轉換。但是,您不需要枚舉聲明中的「:int」部分。你可以參考這裏關於轉換:https://stackoverflow.com/questions/943398/get-int-value-from-enum-in-c-sharp –