我想要一个C#4字符串常量来表示一个新行和一个标签,如下所示:
internal const string segment = "\r\n\t";
我知道有Environment.Newline,我想我可以这样使用:
internal const string segment = Environment.NewLine + "\t";
我的问题是构建具有新行和制表符的字符串常量的最有效方法是什么?
答案 0 :(得分:15)
如上所述,如果您将字符串声明为const
,则效率方面绝对没有区别。任何常量都将在编译时替换并使用实习字符串。
不幸的是,第二个选项不是编译时常量,也不会编译。要使用它,您需要将其声明为:
internal static readonly string segment = Environment.NewLine + "\t";
我个人认为,就意图而言,这一点非常明确,这是我的偏好,即使它不是编译时间常数。额外的开销/效率损失非常小,我个人会在编译时常量中选择清晰的意图和清晰的代码。
请注意,如果将此代码移植到Mono,使用Environment.NewLine
也可以正确,并且您的目标是使用当前的平台行分隔符。在特定情况下,第一个在非Windows平台上将是不正确的。如果您的目标是专门包含"\r\n\t"
,并且不希望使用特定于平台的行分隔符,那么Environment.NewLine
将是不合适的选择。
答案 1 :(得分:5)
const
无效。使用static readonly
。
internal static readonly string segment = Environment.NewLine + "\t";
答案 2 :(得分:1)
纯粹的速度效率然后第一个将赢,特别是因为第二个不能被const
然后无法编译。
然而,第二个确实非常快,所以我不在乎。
更重要的是,这些只不过是一回事。
归结为“你为什么要使用\ r \ n \ t”?
如果您正在使用\ r \ n \ t,因为您在Windows上和Windows上的换行符通常是\ r \ n,那么您一定要使用:
internal static readonly string segment = Environment.NewLine + "\t";
使用另一个是错误的,并且可能会引入您将在未来几年内看不到的错误。
如果您正在使用\ r \ n,因为您正在使用“带有CRLF后跟一个标签的单独段”的规范,那么您一定要使用:
internal const string segment = "\r\n\t";
使用另一个是错误的。
这是让人真实的东西。 Windows用户编写的HTTP代码恰好在标题和正文之间的标题二之间使用Windows换行符。然后它被移植到新行是\ n的某个地方并且它会中断,因为无论系统使用什么,HTTP都要求\ r \ n。反过来也是如此。
(根据严格/宽容的原则,假设那里的其他代码会一直出错,并接受所有各种换行表格,这也是一个好主意。)