2013-03-13 66 views
2

我只是想知道.Net是否有內置的任何地方的字符枚舉。.Net是否有一個可用的字符枚舉

我只是解析一個CSV文件,並將它發生在我,我想可以這樣做:

line.Split(Chars.Comma) 

代替:

line.Split(char(',')) 

它只是似乎更清潔對我來說。

.Net是否將此隱藏在任何地方?

Ps:我知道Windows.Forms.Keys在大多數情況下都可以使用,但沒有所有的標點符號。

編輯(大部分的答案後):

我應該提到,我在編碼噓,不C#(所以爲什麼我問的.Net一般),所以line.Split( ',')不起作用,','是Boo中的一個字符串。

我沒有考慮到它將不得不覆蓋unicode,這將是巨大的,而我打算使用它的所有計劃都是爲了使我無需每次創建應用程序時都爲標點符號創建常量這樣做的文本操作。

這裏是我選擇來解決這個方式:

static class StingSplitters: 

    public final Comma = char(',') 
    public final BackSlash = char('\\') 
    ... 

感謝所有的輸入。

+1

你的第二個代碼示例應該是'line.Split(',')',我發現它們全部最清潔 – GolfWolf 2013-03-13 10:08:00

+1

但是,對於解析CSV我推薦使用庫,比如[File Helpers](http ://filehelpers.sourceforge.net/) – GolfWolf 2013-03-13 10:09:28

+0

C#中有65536個字符可用;他們每個人都有一個現有的角色代表......「a」,「b」等等(好吧,有些代表有點難)。沒有必要使用* enum *,但是* *在你所說的內容中是...... *不是用於'char',而是用於'char []'。 – 2013-03-13 10:14:55

回答

1
line.Split(','); 

工作得很好。但是請注意,這實際上是一個params數組,每次都涉及一個新數組。我建議爲最常用的東西創建一個靜態char[]。你可能包裝在一個奇特的包裝,但我只是保持簡單。我真的有一個類是:

// interesting fact; we have hundreds of locations where we use someString.Split(char) or similar; every single one 
// of those allocates a new array; idea: fill this in and do a mass replace to avoid a shit-ton of allocations 
public static class StringSplits 
{ 
    public static readonly char[] Space = { ' ' }, 
            Comma = { ',' }, 
            Period = { '.' }, 
            ... 
            NewLine_CarriageReturn = { '\n', '\r' }, 
            Comma_SemiColon = { ',', ';' }, 
            Comma_SemiColon_Space = { ',', ';', ' ' }, 
            BackSlash_Slash_Period = { '\\', '/', '.' }; 

請注意,其中一些不是單字符。

它聽起來很愚蠢,但如果你正在做大量的字符串操作,它可以加起來很多不必要的數組。

坦率地說,我會 .NET 5至包括像方法:

string.Split(char); 
string.Split(char,char); 

而不只是:

string.Split(params char[] chars); 
+0

有趣的是,'Console.Write'方法每個都有多達三個參數的重載。 – Joey 2013-03-13 10:17:59

+0

似乎你每次都對創建新字符(或者實際上是params數組)感到同樣的不安。我實際上正在走向類似你的課程,但是想知道我是否在重新發明輪子。 – andyhasit 2013-03-13 11:05:28

3

不,沒有這樣的事情。到底是什麼?實際上是否應該爲每個Unicode字符包含一個常量類,每當它們分配新的代碼點時,它們都與Unicode保持同步?而且我想這名字,像

Chars.ArabicLigatureUighurKirghizYehWithHamzaAboveWithAlefMaksuraIsolatedForm 

變得有點笨重相比'ﯹ'

你也可以寫

line.Split(','); 

這是不是真的難度比line.Split(Chars.Comma)閱讀。

+0

'char' ***是***整數類型;它基本上是'ushort' – 2013-03-13 10:15:24

+0

在你看來,它以什麼方式*不是一個整數類型? – 2013-03-13 10:17:12

+0

提示:下面是「整型」的C#語言參考:http://msdn.microsoft.com/en-gb/library/exx3b86w(v=vs.110).aspx – 2013-03-13 10:18:27

1

你可以這樣做:

line.Split(','); 

或做一個const:

const char COMMA = ','; 
... 
line.Split(COMMA); 

或做與枚舉:

public enum Chars { 
    Comma = ',', 
} 

line.Split((char)Chars.Comma); 

在我看來,const的解決方案是最乾淨的。不過,我不會打電話給我的常量COMMA,但稱它爲SEPERATOR。那是真的。

0

Windows.Forms.Keys只需要知道鍵盤上顯示的內容。 char枚舉需要更多的值,因爲它是unicode,可以包含多達65.000個不同的值。試想一下,輸入Char。並獲得與65K可能的選項下拉。

所以不,沒有Char枚舉。如果你想要一個常數,你需要自己定義一個。

0

首先,類名是char不在.net中的字符。 第二件事,我認爲沒有字符枚舉,你應該通過一個字符數組作爲分隔符作爲多個字符。

有關詳細信息,您可以看到此頁。 http://msdn.microsoft.com/en-us/library/system.string.split.aspx

+0

「Chars」就是這樣一個類或枚舉可能被稱爲的例子。 – andyhasit 2013-03-13 10:56:05

相關問題