根據msdn枚舉不能有基類型的字符。爲什麼枚舉不能有基類型的char?此外,爲什麼微軟強烈建議enum包含一個值爲0的常量?非常感謝字符的.NET枚舉基類型
9
A
回答
5
值你可以找到鏈接到C# language specification。我認爲限制的原因可能來自語言規範4.1.5節中的這些陳述。
char類型被分類爲一體型,但它與其他整數類型以兩種方式不同:
有從其他類型char類型的隱式轉換。特別是,即使sbyte,byte和ushort類型的值的範圍可以使用char類型完全表示,但不存在從sbyte,byte或ushort到char的隱式轉換。
字符類型的常量必須寫成字符文字或整數文字與轉換類型結合使用char。例如,(char)10與'\ x000A'相同。
至於爲什麼零,因爲未初始化enum
的默認值是0
-1
爲什麼枚舉不能有基類型的char?
我建議這是由於.NET處理Chars爲unicode,意思是說一個Char!= Byte(它的值可能大於255)。枚舉的不能基於布爾類型,也是一個整數類型。同樣使用Char作爲基本類型,wouyld複製現有的基本類型,因此沒有必要這樣做。
爲什麼微軟強烈建議enum包含一個值爲0的常量?
爲什麼建議您總是等於價值的原因0是因爲枚舉是值類型,當一個新的由它將具有0
2
爲什麼枚舉沒有燒焦的基本類型?
因爲它沒有任何意義(與基本類型的float沒有多大差別)。在封面下,枚舉是一個整數,但是作爲char可以是任何unicode字符,並不是真正的從char到整數的映射。
爲什麼微軟強烈建議enum包含一個值爲0的常量?
因爲一個未初始化的枚舉的默認值是零(見Enums should have zero value)
3
雖然你在這裏看到,你是專門不允許定義字符枚舉,因爲沒有隱式轉換從焦炭到任何其他整數類型,有一個整體的轉換從字符爲整數,所以你可以這樣做:
public enum MyCharEnum
{
BEL = 0x07,
CR = 0x0D,
A = 'A',
z = 'z'
}
,並使用顯式轉換到字符,即:
MyCharEnum thing = MyCharEnum.BEL;
char ch = (char)thing;
System.Console.WriteLine(ch.ToString());
(是的,它使一個嗶 - 就像過去的好時光!)
相關問題
- 1. 解析字符串枚舉類型
- 2. 從字符串獲取枚舉類型
- 3. C#:基於不同枚舉類型的枚舉值返回枚舉值
- 4. 壓倒一切的枚舉基類型
- 5. 類型枚舉
- 6. 基於枚舉創建枚舉類別
- 7. .NET SqlClient錯誤號枚舉類型
- 8. .NET枚舉類型有多個定義
- 9. .net枚舉blittable類型? (編組)
- 10. 與枚舉.NET類型ASMX POST對象
- 11. Ç枚舉(枚舉類型定義)的
- 12. Node.js native枚舉中的枚舉類型
- 13. 自定義枚舉基礎類型
- 14. 基本類型生鏽枚舉
- 15. 轉換成枚舉基礎類型
- 16. 非整數基礎類型,枚舉
- 17. 枚舉vs強類型枚舉
- 18. 枚舉拋出「不是枚舉類型」
- 19. 如何枚舉類型設置爲字符串類型
- 20. 上枚舉類型
- 21. HTML5枚舉類型
- 22. 爲枚舉類型
- 23. 枚舉或類型
- 24. psycopg2枚舉類型
- 25. .NET框架中的字母是否有枚舉類型?
- 26. 具有泛型類型的泛型枚舉枚舉
- 27. 帶數字常量的枚舉類型
- 28. SOLR枚舉的字段類型
- 29. 打字稿中的字符串枚舉類型
- 30. NSStringEncoding - 枚舉到字符串枚舉
+1,雖然你鏈接的頁面不是C#語言規範;) –
@Thomas:oops - 讓我修復它 – 2011-08-05 15:53:02
哇!很好的發現。 – gh9