2

我只是想知道.Net 是否在任何地方都有内置的字符枚举。

我只是在解析一个 CSV 文件,我想到了我希望能够执行以下操作:

line.Split(Chars.Comma)

代替:

line.Split(char(','))

它对我来说似乎更干净。

.Net 是否将其隐藏在任何地方?

Ps:我知道 Windows.Forms.Keys 在大多数情况下都有,但没有所有的标点符号。

编辑(在大多数答案之后):

我应该提到我是在 Boo 中编码,而不是 C#(因此我一般要求使用 .Net),所以 line.Split(',') 不能作为 ',' 在 Boo 中使用。

我没有考虑到它必须涵盖 unicode,这将是巨大的,而我计划使用它的目的是让我不必在每次创建应用程序时都为标点符号创建常量的文本操作。

这是我选择解决此问题的方法:

static class StingSplitters:

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

感谢所有的投入。

4

5 回答 5

3

不,没有这样的事情。到底是为了什么,真的?实际上是否应该有一个包含每个 Unicode 字符的常量的类,在分配新代码点时与 Unicode 保持同步?我猜这些名字就像

Chars.ArabicLigatureUighurKirghizYehWithHamzaAboveWithAlefMaksuraIsolatedForm

相比起来有点笨拙'ﯹ'

你也可以写

line.Split(',');

这并不比line.Split(Chars.Comma).

于 2013-03-13T10:08:39.733 回答
1

你可以这样做:

line.Split(',');

或者做一个常量:

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

或者用枚举制作:

 public enum Chars {
    Comma = ',',
 }

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

在我看来, const 解决方案是最干净的。但是我不会将我的 const COMMA 称为分隔符,而是将其称为分隔符。那是真的。

于 2013-03-13T10:09:23.190 回答
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);
于 2013-03-13T10:09:37.260 回答
0

Windows.Forms.Keys 只需要知道键盘上显示的内容。char 枚举需要更多的值,因为它是 unicode 并且可以包含多达 65.000 个不同的值。想象一下你输入 Char。并获得一个包含 65k 可能选项的下拉列表。

所以不,没有 Char 枚举。如果你想要一个常数,你需要自己定义一个。

于 2013-03-13T10:09:32.770 回答
0

首先,.net 中类的名称是 Char 而不是 Chars。第二件事,我认为字符没有枚举,您应该将一个字符数组传递给多个字符作为分隔符。

有关详细信息,您可以查看此页面。 http://msdn.microsoft.com/en-us/library/system.string.split.aspx

于 2013-03-13T10:13:48.057 回答