2010-06-17 83 views
1

有人可以請給我一些枚舉的例子嗎?我不明白這個概念。我的意思是IEnumerable和枚舉?枚舉的目的是什麼?

你用過enum嗎?請告訴我示例代碼

+5

你的意思'IEnumerable的'或'enum'? – JaredPar 2010-06-17 20:19:06

+0

你能澄清一下嗎?你的意思是一種實現IEnumerable()的類型,或者像一個具有一定數量值的'enum'? – 2010-06-17 20:19:34

+4

@JaredPar,顯然他自己不知道...... – Dykam 2010-06-17 20:35:40

回答

3

的列表闡述貝瑞的帖子:

enum Title 
{ 
Mr =1, 
Mrs, 
Miss 
} 


一個ENUM是一個用戶定義的類型。使用上面的枚舉器,您可以根據需要創建標題的任意多個實例。

Title mine = Title.Mr; 
Title sister = Title.Miss; 
etc. 



一個IEnumerable是枚舉類型的數組。使用foreach語句對我最有幫助。

IEnumerable<string> list = new[] {"stringone", "string2", "stringthree"}; 

foreach (string s in list) 
{ 
    Console.WriteLine(s); 
} 

將產生以下的輸出:

stringone 
string2 
stringthree 
+2

「IEnumerable是一個數組」:它不是一個數組,因爲您不能使用索引器訪問元素。您只能使用'foreach'或'IEnumerator '接口。 – 2010-06-17 20:44:20

+0

這是一個列表,它提供了一個迭代器來迭代列表......不像數組那樣,沒有定義的索引值。 – Armstrongest 2010-06-17 20:47:19

0

打算假設你的意思是enum超過IEnumerable<T>

枚舉非常適合以半安全的方式對相關的一組命名值進行分組。
我最喜歡使用enum的例子是替換布爾參數。

例如下面的代碼是等效的,但是一個比另一個

String.Compare(str1,str2,true); 
String.Compare(str1,str2,StringComparison.OrdinalIgnoreCase); 
8

你有某種神奇的價值和意義之間映射的任何時候顯著更具可讀性,那麼你應該考慮使用一個枚舉來代替。這樣你可以直接使用枚舉常量而不是魔術值。

例如,你可以有這樣的事情:

string getDayOfWeek(int dayOfWeek) 
{ 
    if(dayOfWeek == 0) 
    return "saturday"; 
    else if(... 
} 

而不是使用,你可以代替已枚舉定義一個int輸入參數:

enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri}; 
string getDayOfWeek(Days dayOfWeek) 
{ 
    if(dayOfWeek == Days.Sat) 
    return "saturday"; 
    else if(... 
} 

getDayOfWeek功能的第一種變體認爲不好的原因有兩個:
1)很難閱讀,因此難以維護並且更容易在代碼中犯錯
2)If你想改變星期六到現在的意思是1你有很多代碼改變使

你可以read more about enumerations here on MSDN

3

枚舉是一種可以有多個值的類型。

,而不用聲明一個名爲顏色可變,並賦予它的字符串「藍色」或「綠色」

你可以創建一個枚舉,並定義顏色藍色,綠色等

這讓的如果您的應用不支持紅色,編譯器會強制執行限制。

否則,你會得到一個更難以調試的運行時錯誤,或者更長的錯誤檢查例程。

編輯

正如DTB說,在某些語言中,所列舉的都是真正在幕後只是整數,所以可以將號碼分配給他們。如果你正確地使用它們,你會這樣做,但它仍然是一個有效的點。

+0

'var c =(Color)99;''enum Color {Blue,Green}'完全沒問題......不確定你的意思是執行限制這裏。 – dtb 2010-06-17 20:21:22

1

將描述與字符串綁定。例如,在您的數據庫中,您有一個存儲0,1,2,3的「教育狀態」列。他們與'高中','同事','單身漢'和'主人'聯繫在一起。在您的應用程序中,您可以進行枚舉以幫助保持這些值。

enum int EducationStatus 
{ 
    highschool, 
    associates, 
    bachelor, 
    masters 
} 

所以你可以說

if(yourRecord.EducationStatus == EducationStatus.highschool) 
... 

,而不是0。此外,這將有助於保持,而不是總是假設0意味着高中值均勻,使用高中,如果它更改爲6,你在一個地方做了這個改變。

2

一個枚舉基本上是一個相關常量的列表。

e.g

enum Title 
{ 
Mr =1, 
Mrs, 
Miss, 
Sir, 
Madame 
} 

完整的例子可以發現here

2

enum關鍵字聲明一個枚舉http://msdn.microsoft.com/en-us/library/sbbt4032(VS.80).aspx

Enum s爲含有一組定義的常量的類型。例如,你可能有這樣定義一個枚舉:

public enum Months 
{ 
    January = 1, 
    February = 2, 
    March = 3, 
    ... 
    December = 12 
} 

在代碼中,你可以使用此類似如下:

Months birthMonth = Months.February; 

Enum s爲當你有多個,離散值有用爲一個變量,並增加您的代碼的可讀性。例如,以下哪一項有更明確的意圖?

File.Open("myFile.txt", 1, 3); 

File.Open("myFile.txt", FileMode.Create, FileAccess.ReadWrite); 
2

IEnumerable<T>是用於標記具有枚舉類(通常集合)的接口;即你可以迭代他們的元素。
IEnumerator<T>是一個包含遍歷枚舉數的方法的接口;通常它被用來逐個處理一個集合的元素。 foreach語言構造是編譯器魔術,可以爲您執行所有必要的操作來遍歷IEnumerator。
用於定義相關,命名常量