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

syn*_*ody 9 c# string

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

internal const string segment = "\r\n\t";
Run Code Online (Sandbox Code Playgroud)

我知道有Environment.Newline,我想我可以像这样使用:

internal const string segment = Environment.NewLine + "\t"; 
Run Code Online (Sandbox Code Playgroud)

我的问题是构造一个具有新行和制表符的字符串常量的最有效方法是什么?

Ree*_*sey 15

如果您将字符串声明为const,如上所述,效率方面绝对没有区别.任何常量将在编译时替换并使用实习字符串.

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

internal static readonly string segment = Environment.NewLine + "\t"; 
Run Code Online (Sandbox Code Playgroud)

我个人认为,就意图而言,这一点非常清楚,这将是我的偏好,即使它不是一个编译时间常数.额外的开销/效率损失非常小,我个人会在编译时常量中选择清晰的意图和清晰的代码.

请注意,如果将此代码移植到Mono,使用Environment.NewLine也具有正确的优点,并且您的目标是使用当前的平台行分隔符.在特定情况下,第一个在非Windows平台上将是不正确的.如果您的目标是明确包含"\r\n\t",并且不希望特定于平台的行分隔符,那么Environment.NewLine这将是一个不恰当的选择.

  • "正确"取决于OP计划如何使用它.如果目的是表示"回车,换行,制表",那么第一个表格是正确的而第二个表格不正确.如果目标是表示"当前平台的行分隔符后跟一个选项卡",则第二个表单是正确的.普遍的做法都不是正确的. (2认同)
  • @ReedCopsey:我总是在这个问题上保持谨慎,因为很多人都使用Environment.NewLine假设它总是*正确的做法,即使它们实际上是在谈论具有特定行分隔符的网络协议. (2认同)

Dan*_*ite 5

const不行.用static readonly.

internal static readonly string segment = Environment.NewLine + "\t"; 
Run Code Online (Sandbox Code Playgroud)