回答
的列表闡述貝瑞的帖子:
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
「IEnumerable是一個數組」:它不是一個數組,因爲您不能使用索引器訪問元素。您只能使用'foreach'或'IEnumerator
這是一個列表,它提供了一個迭代器來迭代列表......不像數組那樣,沒有定義的索引值。 – Armstrongest 2010-06-17 20:47:19
打算假設你的意思是enum
超過IEnumerable<T>
。
枚舉非常適合以半安全的方式對相關的一組命名值進行分組。
我最喜歡使用enum
的例子是替換布爾參數。
例如下面的代碼是等效的,但是一個比另一個
String.Compare(str1,str2,true);
String.Compare(str1,str2,StringComparison.OrdinalIgnoreCase);
你有某種神奇的價值和意義之間映射的任何時候顯著更具可讀性,那麼你應該考慮使用一個枚舉來代替。這樣你可以直接使用枚舉常量而不是魔術值。
例如,你可以有這樣的事情:
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你有很多代碼改變使
枚舉是一種可以有多個值的類型。
,而不用聲明一個名爲顏色可變,並賦予它的字符串「藍色」或「綠色」
你可以創建一個枚舉,並定義顏色藍色,綠色等
這讓的如果您的應用不支持紅色,編譯器會強制執行限制。
否則,你會得到一個更難以調試的運行時錯誤,或者更長的錯誤檢查例程。
編輯
正如DTB說,在某些語言中,所列舉的都是真正在幕後只是整數,所以可以將號碼分配給他們。如果你正確地使用它們,你會這樣做,但它仍然是一個有效的點。
'var c =(Color)99;''enum Color {Blue,Green}'完全沒問題......不確定你的意思是執行限制這裏。 – dtb 2010-06-17 20:21:22
將描述與字符串綁定。例如,在您的數據庫中,您有一個存儲0,1,2,3的「教育狀態」列。他們與'高中','同事','單身漢'和'主人'聯繫在一起。在您的應用程序中,您可以進行枚舉以幫助保持這些值。
enum int EducationStatus
{
highschool,
associates,
bachelor,
masters
}
所以你可以說
if(yourRecord.EducationStatus == EducationStatus.highschool)
...
,而不是0。此外,這將有助於保持,而不是總是假設0意味着高中值均勻,使用高中,如果它更改爲6,你在一個地方做了這個改變。
的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);
IEnumerable<T>
是用於標記具有枚舉類(通常集合)的接口;即你可以迭代他們的元素。
IEnumerator<T>
是一個包含遍歷枚舉數的方法的接口;通常它被用來逐個處理一個集合的元素。 foreach
語言構造是編譯器魔術,可以爲您執行所有必要的操作來遍歷IEnumerator。
用於定義相關,命名常量
- 1. MvvmCross:枚舉MvxRequestedByType的目的是什麼?
- 2. 什麼枚舉
- 3. 獲取枚舉或返回枚舉數的區別是什麼?
- 4. Object.create中的枚舉參數是什麼?
- 5. 什麼是TypeScript中的枚舉標誌?
- 6. Python中枚舉的意思是什麼?
- 7. 什麼是HTML中的枚舉屬性?
- 8. 什麼是Objective-C的枚舉類型
- 9. 什麼是枚舉的返回類型|?
- 10. 什麼是通枚舉類型的WebAPI
- 11. 什麼是System.Windows.Forms.Keys枚舉中的「OEM」鍵?
- 12. 爲什麼枚舉包括可枚舉
- 13. Keys枚舉中的 - (減/下劃線)和=(相等/加)鍵的枚舉是什麼?
- 14. DateTimeStyles.RoundtripKind枚舉是什麼意思?
- 15. 是什麼這兩個枚舉
- 16. Java7/WatchEvent - 爲什麼它不是枚舉?
- 17. 這個枚舉是什麼意思?
- 18. 在枚舉枚舉之前通過IEnumberable調用Any()的好處是什麼?
- 19. 是枚舉Java中的枚舉
- 20. 什麼時候Task.WhenAll枚舉?
- 21. 舉辦活動的目的是什麼?
- 22. 什麼使用除了枚舉的c#
- 23. 爲什麼Python的枚舉太慢?
- 24. 什麼是枚舉用戶的活動目錄所需的安全權限
- 25. 帶枚舉的MySQL枚舉
- 26. 枚舉命名目的地
- 27. 爲什麼所有的opengl枚舉都是十六進制的?
- 28. 什麼是java spring中的枚舉類的bean id?
- 29. 什麼是getfield命令,SetField,getProperty和的SetProperty中的BindingFlags枚舉?
- 30. 爲什麼@objc枚舉與純粹的Swift枚舉有不同的描述?
你的意思'IEnumerable的'或'enum'? –
JaredPar
2010-06-17 20:19:06
你能澄清一下嗎?你的意思是一種實現IEnumerable()的類型,或者像一個具有一定數量值的'enum'? –
2010-06-17 20:19:34
@JaredPar,顯然他自己不知道...... – Dykam 2010-06-17 20:35:40