新行+制表符的字符串常量

本文关键字:字符串 常量 制表符 新行 | 更新日期: 2023-09-27 18:17:54

我想要一个c# 4字符串常量来表示新行和制表符,如下所示:

internal const string segment = "'r'n't";

我知道有环境。换行符,我想我可以这样使用:

internal const string segment = Environment.NewLine + "'t"; 

我的问题是什么是最有效的方式来构建一个字符串常量,有一个新的行和一个制表符?

新行+制表符的字符串常量

如果如上所述将字符串声明为const,则在效率方面绝对没有区别。任何常量都将在编译时被替换,并使用一个内部字符串。

不幸的是,第二个选项不是编译时间常数,不会编译。为了使用它,您需要将其声明为:

internal static readonly string segment = Environment.NewLine + "'t"; 

我个人认为,就意图而言,这是非常清楚的,这将是我的首选,即使它不会成为编译时常数。额外的开销/效率损失是如此小得令人难以置信,以至于我个人宁愿选择清晰的意图和易读的代码,而不是编译时间常数。

请注意,如果将此代码移植到Mono,使用Environment.NewLine还具有正确的好处,并且您的目标是使用当前平台的行分隔符。在这种情况下,前者在非windows平台上是不正确的。如果您的目标是专门包含"'r'n't",并且不需要特定于平台的行分隔符,那么Environment.NewLine将是一个不合适的选择。

const不能工作。使用static readonly .

internal static readonly string segment = Environment.NewLine + "'t"; 

纯粹的速度效率,那么第一个将获胜,特别是因为第二个不能制作const,然后无法编译。

不过,第二种确实会非常快,所以我不在乎。

更重要的是,它们显然不是一回事。

归根结底就是"你为什么要用'r'n't"?

如果你使用'r'n't,因为你是在Windows上,而Windows上的换行符通常是'r'n,那么你绝对应该使用:

internal static readonly string segment = Environment.NewLine + "'t";

使用另一种是错误的,并且可能会引入数年都不会看到的bug。

如果你正在使用'r'n,因为你正在使用一个规范,说"用一个CRLF后跟一个制表符分隔段",那么你绝对应该使用:

internal const string segment = "'r'n't";

使用另一个是错误的。

这是真的咬人的东西。Windows用户编写的HTTP代码恰好在头和正文之间使用Windows换行符。然后它被移植到换行符为'n的地方,因为无论系统使用什么,HTTP都要求'r'n。反之亦然

(在严格/允许原则下,假设其他代码会一直出错,并接受所有不同的换行符形式也是一个好主意)