C#6中的长字符串插补行

Jer*_*wdy 122 c# c#-6.0

我发现虽然字符串插值在应用于我现有的代码库的字符串格式调用时非常好,但考虑到通常首选的列限制,字符串对于单行很快就会变得太长.特别是当插值的表达式很复杂时.使用格式字符串,您可以将变量列表拆分为多行.

var str = string.Format("some text {0} more text {1}",
    obj1.property,
    obj2.property);
Run Code Online (Sandbox Code Playgroud)

有没有人有任何打破这些线路的首选方法?

我想你可以这样做:

var str = $"some text { obj1.property }" +
  " more text { obj2.property };
Run Code Online (Sandbox Code Playgroud)

ang*_*son 177

可以将该行分成多行,但我不会说语法看起来很好.

您需要使用$@语法来使用插值的逐字字符串,并且可以在{...}参数中放置换行符,如下所示:

string s = $@"This is all {
    10
    } going to be one long {
    DateTime.Now
    } line.";
Run Code Online (Sandbox Code Playgroud)

上面的字符串不包含任何换行符,实际上会有这样的内容:

这是所有10将是一个长01.08.2015 23.49.47线.

(注意,挪威格式)

现在,说完了,我不会停止使用string.Format.在我看来,这些字符串插值表达式中的一些看起来非常好,但更复杂的表达式开始变得非常难以阅读.考虑到除非你使用FormattableString,否则代码将编译成一个调用String.Format,我会说继续String.Format它有意义的地方.

  • 这个答案帮助我弄清楚如何与此完全相反.感谢`$ @""`语法! (8认同)
  • @Enzoaeneas 我认为您高估了评论中的格式支持,但我理解并同意您的说法。 (2认同)

Mar*_*zek 58

您可以组合$@在一起,得到的字符串插值和多行字符串文字:

var str = $@"some text { obj1.property }
     more text { obj2.property }";
Run Code Online (Sandbox Code Playgroud)

但这会给你一个NewLine角色,所以它可能不是你想要的.

  • 确实如此.更新了我明确说明的答案. (5认同)
  • 但是@实际上不会将换行符放入文字中吗? (3认同)
  • 不仅是新行,还有新行的初始选项卡。为了在 Visual Studio 中使用 `$@"` 时正确描述实际的字符串格式,您必须从文本编辑器的最左侧开始每个新行。 (2认同)

Col*_*nic 18

虽然OP问别的东西,我希望很多人阅读这个问题想插一多$""的作品一样@"".为此,请使用$@""

$@"Height: {height}
Width: {width}
Background: {background}"
Run Code Online (Sandbox Code Playgroud)

  • 他明确表示,这个答案是针对那些使用字符串插值语法搜索如何进行多行字符串的观众. (7认同)
  • 他不想在输出中添加换行符,只需要将代码本身包装在不同的行上 (3认同)

Cal*_*aNN 5

就是这个:

var str = $"some text { obj1.property }" +
          $" more text { obj2.property }";
Run Code Online (Sandbox Code Playgroud)

注意第二$$"..." + $"..."

  • 请注意,这将两次调用 String.Format,并在内存中创建三个字符串(A 面、B 面和 A+B) (24认同)
  • 这不会阻止您在连接的字符串上使用“FormattableString”强制转换吗? (4认同)
  • 在当今的许多实现中,在具有 Gb 内存的 GHz CPU 上运行、额外的调用和额外的字符串不会给您带来性能问题。例如,使用 O(n2) 算法会导致性能问题。我认为对这个人投反对票是不公平的。 (4认同)