top | item 44856731

(no title)

kcartlidge | 6 months ago

I much prefer C# 11's raw string literals. It takes the indentation of the first line and assumes the subsequent ones have the same indentation.

  string json = $"""
      <h1>{title}</h1>
      <article>
          Welcome to {sitename}.
      </article>
      """;
And it even allows for using embedded curly braces as real characters:

  string json = $$"""
      <h1>{{title}}</h1>
      <article>
          Welcome to {{sitename}}, which uses the <code>{sitename}</code> syntax.
      </article>
      """;
The $ (meaning to interpolate curly braces) appears twice, which switches interpolation to two curly braces, leaving the single ones untouched.

discuss

order

Metasyntactic|6 months ago

Just a minor correction (as I'm the author of c#'s raw string literal feature).

The indentation of the final ` """` line is what is removed from all other lines. Not the indentation of the first line. This allows the first line to be indented as well.

Cheers, and I'm glad you like it. I thought we did a really good job with that feature :-)

panzerboiler|6 months ago

Did you draw inspiration from Swift's multiline string literal, or was it the other way around? The syntax looks very similar, if not identical.

gf000|6 months ago

Really not trying to go into any of the "holy wars" here, but could you please compare C#'s feature to Java's multi-line strings? I'm only familiar with the latter, and I would like to know if they are similar in concept or not.

winwang|6 months ago

That's a fantastic design idea, and it seems to require all the other lines to have the same indentation "prefix".

Haven't used much C#, but I love Scala's `.stripPrefix` and `StringContext`.

kcartlidge|6 months ago

Thanks for the correction. I never read the spec, just started using it. And as I tend to balance my first and last line indentation I never realised.