2010-12-22 30 views
5

Enum'u (The base class) bir parametre olarak kabul eden bir fonksiyonum var:Bir Enum bir int nasıl?

public void SomeFunction(Enum e); 

Ancak, bir sebepten dolayı int. Numaralandırma adının adını alabilirim, ancak tümleşik temsilini değil.
Sayımın türünü gerçekten umursamıyorum, sadece integral değere ihtiyacım var. Bunun yerine bir int geçirmeli miyim? Yoksa burada yanlış bir şey mi yapıyorum?

+0

Tam olarak nasıl yayın yapmaya çalışıyorsunuz? – annakata

+1

@annakata yapardım * tahminim * –

+0

@annakata " 'int' bir tip 'System.Enum' dönüştürülemez" verir '(int) e',: Ben bariz duyuyorum düşünce üzgünüm. Marc haklı. 'Enum' gerçek türü biliniyorsa –

cevap

7

Enum aslında bir enum ... kafa karıştırıcı değil. Bir enumun kutulu bir kopyasıdır; Hala, şu çalışmalıdır: Ayrıca tüm çeteleler int dayanmaktadır değil

Not

int i = (int)(object)e; 

(zaten kutuluolduğundan bu (object) döküm, bir kutu eklemeyin etmez); Bu açılmamış hile, int enums için başarısız olabilir.

+0

(örneğin Reflection.BindingFlags) bir edilene döküm ve daha sonra sadece bu kullanabilir bir tamsayı ya da uzun bir değer olarak. Yani kimin altta yatan tip bir uygulamanın kullandığı tip daha büyük değildir enum türleri için çalışacaktır. – supercat

0
Int32 intValue = (Int32)Enum.Parse(e.GetType(), e.ToString()); 
13
int i = Convert.ToInt32(e); 

diğer çözümler bir InvalidCastException atacağım oysa enum int32 dışında başka bir şey saklanır, bu, enum yatan depolama bakılmaksızın çalışacak (diyelim ki, bir byte veya short)