2011-08-05 103 views
9

根據msdn枚舉不能有基類型的字符。爲什麼枚舉不能有基類型的char?此外,爲什麼微軟強烈建議enum包含一個值爲0的常量?非常感謝字符的.NET枚舉基類型

回答

5

值你可以找到鏈接到C# language specification。我認爲限制的原因可能來自語言規範4.1.5節中的這些陳述。

char類型被分類爲一體型,但它與其他整數類型以兩種方式不同:

  • 有從其他類型char類型的隱式轉換。特別是,即使sbyte,byte和ushort類型的值的範圍可以使用char類型完全表示,但不存在從sbyte,byte或ushort到char的隱式轉換。

  • 字符類型的常量必須寫成字符文字或整數文字與轉換類型結合使用char。例如,(char)10與'\ x000A'相同。

至於爲什麼零,因爲未初始化enum的默認值是0

+0

+1,雖然你鏈接的頁面不是C#語言規範;) –

+0

@Thomas:oops - 讓我修復它 – 2011-08-05 15:53:02

+0

哇!很好的發現。 – gh9

-1

爲什麼枚舉不能有基類型的char?

我建議這是由於.NET處理Chars爲unicode,意思是說一個Char!= Byte(它的值可能大於255)。枚舉的不能基於布爾類型,也是一個整數類型。同樣使用Char作爲基本類型,wouyld複製現有的基本類型,因此沒有必要這樣做。

爲什麼微軟強烈建議enum包含一個值爲0的常量?

爲什麼建議您總是等於價值的原因0是因爲枚舉是值類型,當一個新的由它將具有0

+1

不知道什麼255有什麼關係。畢竟,枚舉的默認支持者是int。 (不是我的downvote *) –

+0

枚舉可以有一個DOUBLE數據類型,就像一個CHAR是16位。所以如果一個ENUM可以採取一倍,那麼沒有一個真正的原因,它不能採取一個CHAR。 – gh9

+0

謝謝你解釋0值,我沒有想到這樣。 – gh9

2

爲什麼枚舉沒有燒焦的基本類型?

因爲它沒有任何意義(與基本類型的float沒有多大差別)。在封面下,枚舉是一個整數,但是作爲char可以是任何unicode字符,並不是真正的從char到整數的映射。

爲什麼微軟強烈建議enum包含一個值爲0的常量?

因爲一個未初始化的枚舉的默認值是零(見Enums should have zero value

+0

@Anthony我的意思是你可以將一個字節轉換爲一個整數。 – Justin

+0

@downvoter這個答案有什麼問題? – Justin

+0

我沒有downvote,但這是一個upvote。 – 2011-08-05 16:08:25

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()); 

(是的,它使一個嗶 - 就像過去的好時光!)