How can I use escape characters with string interpolation in C# 6?

C#.NetString Interpolation

C# Problem Overview


I've been using string interpolation and love it. However, I have an issue where I am trying to include a backslash in my output, but I am not able to get it to work.

I want something like this...

var domain = "mydomain";
var userName = "myUserName";
var combo = $"{domain}\{userName}"

I want the output of combo to be:

myDomain\myUserName

I get a syntax error about the \ being an escape character. If I put in \\ then the syntax error is gone, but the output is myDomain\\myUsername.

How can I include escaped characters in an interpolated string?

C# Solutions


Solution 1 - C#

Escaping with a backslash(\) works for all characters except a curly brace.

If you are trying to escape a curly brace ({ or }), you must use {{ or }} per $ - string interpolation (C# reference)

>... All occurrences of double curly braces (“{{“ and “}}”) are converted to a single curly brace.

Solution 2 - C#

You can do this, using both the $@. The order is important.

var combo = $@"{domain}\{userName}";

The original question mentions specifically C# 6. As commented, C# 8 no longer cares for the order.

Solution 3 - C#

Eduardo is correct. You escape curly braces by doubling up. Therefore, if you wanted to output the domain variable as {mydomain} you would need to do:

$"{{{domain}}}";

Furthermore, assuming that the current date is 1 Sept 2016, doing this:

$"The date is {DateTime.Now}";

would output something like "The date is 2016/09/01 3:04:48 PM" depending on your localization. You can also format the date by doing:

$"The date is {DateTime.Now : MMMM dd, yyyy}";

which would output "The date is September 1, 2016". Interpolated strings are much more readable. Good answer Eduardo.

Solution 4 - C#

$"{domain}\\{user}"

Works fine - escaping works as usual (except when escaping {). At least on .NET 4.6 and Visual Studio 14.0.22823 D14REL.

If it doesn't work for some reason (maybe you're using an older version of the compiler?), you could also try being more explicit:

$"{domain}{@"\"}{user}"

Solution 5 - C#

The rule for escape the backslash in an interpolated string is to duplicate the backslash:

var domain = "mydomain";
var userName = "myUserName";
var combo = $"{domain}\\{userName}";

Console output

But if you also use the interpolated string as a verbatim string then you don't need to escape the backslash:

var domain = "mydomain";
var userName = "myUserName";
var combo = $@"{domain}\{userName}";

And you get the same:

Console output

For a tutorial about interpolated strings (in Spanish): see a video about interpolated strings

Solution 6 - C#

If I did not misunderstand, the solution is real simple:

var domain = "mydomain";
var userName = "myUserName";
var combo = $"{{{domain}}}\\{{{userName}}}";
Console.WriteLine(combo);

I share birdamongmen's answer as well as the good reference provided there.

Solution 7 - C#

You can use this -

' First, declare the curly brackets as chars
Dim LeftBrace As Char = "{"
Dim RightBrace As Char = "}"

' Then in your string, use it like this:
Dim myStr As String = $"This is a {LeftBrace}String{RightBrace}"

' Now, the output will be
' This is a {string}code here

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMattView Question on Stackoverflow
Solution 1 - C#birdamongmenView Answer on Stackoverflow
Solution 2 - C#NhanView Answer on Stackoverflow
Solution 3 - C#Dirk StraussView Answer on Stackoverflow
Solution 4 - C#LuaanView Answer on Stackoverflow
Solution 5 - C#freedeveloperView Answer on Stackoverflow
Solution 6 - C#EduardoView Answer on Stackoverflow
Solution 7 - C#Vinod KCView Answer on Stackoverflow