我只是想知道.Net是否在任何地方都有内置的字符枚举。
我只是在解析一个CSV文件,它发生在我身上我希望能够做到这样的事情:
line.Split(Chars.Comma)
而不是:
line.Split(char(','))
这对我来说似乎更干净。
.Net有没有隐藏在哪里?
Ps:我知道Windows.Forms.Keys在大多数情况下会这样做,但没有所有的标点符号。
编辑(在大部分答案之后):
我应该提到我在Boo中编码,而不是C#编码(因此我一般要求.Net),所以line.Split(',')不起作用','是一个字符串in嘘声。
我没有考虑到它必须覆盖unicode,这将是巨大的,而我计划使用它的所有是为了使我不必每次创建应用程序时都必须为标点符号创建常量做那种文字处理。
以下是我选择解决此问题的方式:
static class StingSplitters:
public final Comma = char(',')
public final BackSlash = char('\\')
...
感谢您的所有输入。
答案 0 :(得分:3)
不,没有这样的事情。真的到底是什么?是否实际上有一个类包含每个Unicode字符的常量,每当它们分配新的代码点时都与Unicode保持同步?而我猜这些名字就像
Chars.ArabicLigatureUighurKirghizYehWithHamzaAboveWithAlefMaksuraIsolatedForm
与'ﯹ'
相比,变得有点笨拙。
你也可以写
line.Split(',');
并不比line.Split(Chars.Comma)
更难阅读。
答案 1 :(得分:1)
你可以这样做:
line.Split(',');
或者制作一个const:
const char COMMA = ',';
...
line.Split(COMMA);
或使用枚举:
public enum Chars {
Comma = ',',
}
line.Split((char)Chars.Comma);
在我看来,const解决方案是最干净的。但是我不会叫我的const COMMA,而是称它为SEPERATOR。这才是真正的。
答案 2 :(得分: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);
答案 3 :(得分:0)
Windows.Forms.Keys只需要知道键盘上显示的内容。 char枚举需要更多的值,因为它是unicode并且可以包含多达~65.000个不同的值。想象一下你输入Char。并获得65k可能选项的下拉菜单。
所以不,没有Char enum。如果你想要一个常数,你需要自己定义一个。
答案 4 :(得分:0)
首先,类的名称是.net中的Char not Chars。 第二件事,我认为没有字符的枚举,你应该传递一个字符数组作为分隔符的多个字符。
有关详细信息,请参阅此页面。 http://msdn.microsoft.com/en-us/library/system.string.split.aspx