我只是想知道.Net是否在任何地方都有内置的字符枚举。
我只是在分析一个CSV文件,突然想到我想做一些事情,比如:
line.Split(Chars.Comma)
而不是:
line.Split(char(','))
我觉得它更干净。
.Net把这个藏起来了吗?
Ps:我知道Windows.Forms.Keys在大多数情况下都是这样,但并没有所有的标点符号。
编辑(在大多数答案之后(:
我应该提到我是用Boo编码的,而不是C#(因此我通常要求使用.Net(,所以行。Split(","(不起作用,因为","是Boo中的一个字符串。
我没有考虑到它必须涵盖unicode,这将是巨大的,而我计划使用它的目的是避免每次创建一个进行这种文本操作的应用程序时都必须为标点符号创建常量。
以下是我选择的解决方法:
static class StingSplitters:
public final Comma = char(',')
public final BackSlash = char('\')
...
感谢所有的投入。
不,没有这样的东西。到底是为了什么?是否应该有一个类为每个Unicode字符都包含一个常量,并在它们分配新的代码点时与Unicode保持同步?我猜像这样的名字
Chars.ArabicLigatureUighurKirghizYehWithHamzaAboveWithAlefMaksuraIsolatedForm
与CCD_ 1相比有点笨拙。
你也可以写
line.Split(',');
其实际上并不比CCD_ 2更难读取。
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 = { '\', '/', '.' };
请注意,其中有些不是单个字符。
这听起来很愚蠢,但如果你正在进行大量的字符串操作,它可能会添加很多不必要的数组。
坦率地说,我会喜欢.NET5包含以下方法:
string.Split(char);
string.Split(char,char);
而不仅仅是:
string.Split(params char[] chars);
您可以执行以下操作:
line.Split(',');
或者做一个常量:
const char COMMA = ',';
...
line.Split(COMMA);
或者使用enum:制作
public enum Chars {
Comma = ',',
}
line.Split((char)Chars.Comma);
在我看来,const解决方案是最干净的。然而,我不会称我的const为COMMA,而是称它为SEPERATOR。这才是真正的。
Windows.Forms.Keys只需要知道键盘上显示的内容。char枚举需要更多的值,因为它是unicode,并且可以包含多达65.000个不同的值。想象一下你输入查尔。并获得一个包含65k个可能选项的下拉列表。
所以不,没有Char枚举。如果你想要一个常数,你需要自己定义一个。
首先,类的名称是Char,而不是.net中的Chars。第二件事,我认为没有字符的枚举,你应该传递一个多个字符的字符数组作为分隔符。
有关详细信息,请参阅本页。http://msdn.microsoft.com/en-us/library/system.string.split.aspx