2013-10-26 72 views
1

我需要枚舉類型來定義在項目中使用的字母。 .NET框架中是否有這樣的枚舉類型?.NET框架中的字母是否有枚舉類型?

+1

你可能想看看這個答案:http://stackoverflow.com/questions/572963/why-we-cant-have-char-enum-types 簡短的答案是「否」,但字母也被稱爲CHAR,這是一個數字。所以你可以直接使用char而不是枚舉。 – Dorival

+1

請注意,默認情況下,枚舉使用'System.Int32'作爲後備。您可以將其解釋爲UTF-32編碼的Unicode代碼點(當然,大多數值在Unicode範圍之外,但這不是問題)。請注意'char'結構(['System.Char'](http://msdn.microsoft.com/en-us/library/System.Char。aspx))具有可以使用的靜態方法'ConvertFromUtf32'和'ConvertToUtf32'。如果你所有的Unicode字符都在[BMP(平面0)](http://en.wikipedia.org/wiki/Basic_Multilingual_Plane)中,那麼它更加簡單:只需在'char'中輸入和輸出。雖然要小心正常化。 –

回答

0

由於沒有可枚舉,一個快速的方法來產生一個枚舉(字符的IEnumerable的),其中包含一個字符集的所有字母...

var letters = Enumerable.Range(0, 255).Select(Convert.ToChar).Where(Char.IsLetter); 

您可以用'或'方法組與IsDigit或IsPunctuation包含其他字母。

注意:這種方法存在限制和假設。檢查這些...

Unicode字符分爲多個類別。角色的 類別是其屬性之一。例如,字符可能是 大寫字母,小寫字母,十進制數字, 字母數字,連接符號,數學符號或貨幣 符號。 UnicodeCategory類返回Unicode 字符的類別。有關Unicode字符的更多信息,請參閱Unicode Standard。

來源:How to determine if a CultureInfo instance supports Latin characters

.NET框架使用的炭結構來表示一個Unicode字符 。 Unicode標準用每個Unicode字符標識一個稱爲代碼點的唯一21位標量數字,並定義了UTF-16編碼格式,該格式指定代碼點如何編碼爲一個或多個16位值的 序列。每個16位值的範圍從 十六進制0x0000到0xFFFF,並存儲在Char結構中。 Char對象的值是它的16位數字(有序)值。

來源:http://msdn.microsoft.com/en-us/library/System.Char(v=vs.110).aspx

+0

這是很棒的代碼片段,謝謝你的回答 – yemrekeskin

+1

我是日本人。此代碼不會生成我的本機字符集中的任何字符。 –

+0

@GayotFow,這是種族主義 –

6

您想到世界上常用的數百個字母中的哪一個?當然,這是一種磨擦。

最糟糕的問題是,即使在採用相同字母表的語言中,字母順序也不相同。例如,丹麥人首先代替了最後一個。一個枚舉的破壞屬性,它是不可能拿出一個枚舉,可以代表一個字母表。除非在世界的一小部分地區使用它,否則你的計劃不會走得太遠。在互聯網時代相當不可能。

請確保您不要試圖保留它char。永遠不要忽視了System.StringComparison

需要
+0

訂單(整理)可能與他的使用無關。 (即使ASCII字符在不同的文化中也可能有不同的排序規則,例如西弗裏西亞語在'I'附近放置'Y',愛沙尼亞語在'S'附近放置'Z')。任何unicode字符都可以很容易地放入'Int32'中通過UTF-32)。當然,Unicode規範化將成爲一個問題。 –

+0

我出生在那裏:) Y實際上是IJ的繃帶。並且通常用分音書寫,Ÿ。 –

+0

這表明事情有多複雜。然而[立陶宛](http://en.wikipedia.org/wiki/Lithuanian_alphabet)也把'Y'放在'I'附近,我認爲他們的'Y'與荷蘭和弗里斯蘭語的'IJ'完全相同。現在,我是Dane :-),我們確實把'Å'放在最後,後三個字母是'Æ-Ø-Å'。不過瑞典語在字母表的末尾有「Å-Ä-Ö」的順序。 –