2011-07-23 61 views
5

在C#中存儲爲整數的枚舉類型?枚舉類型存儲爲C#中的整數嗎?

將下面的枚舉表示爲0,1,2?

如果不是,定義一個枚舉最輕的方法是什麼?

public enum ColumnType 
{ 
    INT,STRING,OBJECT 
} 
+0

你是什麼意思'最輕的方式',內存消費? –

+0

小調;大寫名字是不常見的;不無效...只是不尋常的。 –

回答

5

From the MSDN

默認基礎類型枚舉元素爲int。

默認情況下,第一個枚舉的值爲0,和每個連續枚舉的值增加1

所以你的假設是正確的。 Enum s存儲爲int s,您的示例將表示爲0,1,2。但是,您不應該依賴於此,並且總是通過它們的指定名稱引用它們,以防某人覆蓋默認值。

5

是的,是enum存儲爲int默認。,如所指示here

您還可以指定基本類型,例如:

enum Foo : short 
{ 
    Bar, 
    Baz 
} 

雖然這通常是沒有必要的。

2

默認情況下是:

http://msdn.microsoft.com/en-us/library/sbbt4032(v=vs.80).aspx

enum關鍵字來聲明一個枚舉,一個獨特的類型 由一組命名的常量稱爲枚舉列表中。 每個枚舉類型都有一個基礎類型,它可以是除char之外的任何 整數類型。枚舉元素的默認基礎類型是int。默認情況下,第一個枚舉具有 值0,並且每個連續枚舉的值增加1。

1

每個枚舉類型都有一個基礎類型,它可以是除char之外的任何整型。 是的,默認情況下你的枚舉表示爲0,1,2,它是定義枚舉的最輕的方法

通過定義初始值作爲你的需求並明確地爲每個枚舉賦值整數值成員以及

1

有關的基礎類型的點早已覆蓋的,所以我會添加不同的背景:,不存在枚舉的情況下

在IL /運行水平。它們只存在:

一個:給編譯器 B:到運行時作爲裝箱值 C:在元數據(參數/字段/變量聲明)

在所有其它時間,它們是純粹整數類型值(最常見的是int)。編譯器使用枚舉變量(等)進行靜態分析,重載解析等,但它發出的操作碼與它爲常量/字面量整數值發出的操作碼相同;即

SomeEnum foo = SomeEnum.WithValueOne; 
int bar = 1; 

將具有相同的IL(除了變量類型,也許)。

變得有趣起來的唯一情況是,如果發射暗箱操作,或類似的ToString(通話)等

所以說:只要你不盒子裏(把它們存儲在一個object場/等等),那麼在運行時,枚舉或整數在存儲或性能方面沒有顯着差異(除非使用.ToString()等)