C# String Interpolation Examples

Use string interpolation with arrays, ints, expressions and method calls. Test string interpolation performance.

String interpolation. This feature inserts values into a string with simple syntax. It is similar to string.Format, but variables may be accessed directly (not through index arguments).Strings

Other features. String interpolation can use array accesses, expressions and method calls as insertion values. Its performance is similar to string.Format calls.

Initial example. Here is a simple example of the string interpolation syntax. We precede the interpolation literal with a "$" sign.

Cats: This is an integer local variable. It equals 100 (there are lots of cats). It is inserted into the "{cats}" part of the literal.

Dogs: This equals 2. It is inserted into the interpolated string literal at the "{dogs}" position.

C# program that uses string interpolation using static System.Console; class Program { static void Main() { int cats = 100; int dogs = 2; // Create a string with string interpolation syntax. string animals = $"cats = {cats} and dogs = {dogs}"; // Call Console.WriteLine. WriteLine(animals); } } Output cats = 100 and dogs = 2

Array elements. Here we access an element from an array in a string interpolation. We use the "$" sign and place the array access within the curly brackets.

Result: The second array element is inserted into the resulting string. We can use "result" like any other string.

C# program that uses array with string interpolation using System; class Program { static void Main() { int[] values = { 10, 20, 30 }; // Test string interpolation with array values. string result = $"The second value is {values[1]}"; Console.WriteLine(result); } } Output The second value is 20

Expressions. We can insert an expression in a string interpolation. Here we insert the id variable multiplied by 10. The result of the expression is inserted as an int.
C# program that uses math using System; class Program { static void Main() { int id = 100; // We can use an expression with a string interpolation. string result = $"The multiplied ID is {id * 10}"; Console.WriteLine(result); } } Output The multiplied ID is 1000

Method calls. A method can be called with a string interpolation. Here we call the Paws() method with an argument of 5. String interpolations support any C# expressions that return values.
C# program that uses method call using System; class Program { static int Paws(int cats) { // Four paws per cat. return cats * 4; } static void Main() { // A string interpolation can call a method. string result = $"The paw count is {Paws(5)}"; Console.WriteLine(result); } } Output The paw count is 20

Character error. In string interpolation we must be careful of the way use we brace characters. The string interpolation parser treats these specially, so we must escape them.
C# program that shows character error class Program { static void Main() { // We cannot use some characters in the same way. string result = $"Size is }"; } } Output Program.cs(6,35,6,36): error CS8086: A '}' character must be escaped (by doubling) in an interpolated string.

Character error, fix. Here we print the close-bracket (brace) character directly by doubling it. Please notice only one char is printed when we specify 2 in the interpolated string.

Note: This is a downside to string interpolation syntax, but it is needed to have special delimiter characters.

C# program that uses brace character correctly class Program { static void Main() { // Double the char. string result = $"My favorite char is }}."; System.Console.WriteLine(result); } } Output My favorite char is }.

Error, close delimiter. We have to have an open and close delimiter to compile a string interpolation. For completeness, here is the error when we do not close an interpolated expression.

Tip: Make sure to correctly close all the interpolated expressions if you wish to compile your program.

C# program that shows syntax errors class Program { static void Main() { string result = $"Hello, {"; } } Output error CS8076: Missing close delimiter '}' for interpolated expression started with '{'. error CS1010: Newline in constant error CS1002: ; expected

Benchmark. Does string interpolation provide good performance? Here I tested string interpolation with two local variables. I use int.Parse to avoid any possible compiler

Version 1: This loop tests a string interpolation with two variable accesses. Its value is tested for correctness.

Version 2: This version uses a string concat expression. The plus signs are compiled to a string.Concat method call.


Version 3: Here we use string.Format. We use substitution markers to insert the values of cats and dogs.


Result: String.Concat was fastest. String interpolation (version 1) and string.Format were about the same speed.

C# program that benchmarks string interpolation using System; using System.Diagnostics; class Program { const int _max = 1000000; static void Main() { int cats = int.Parse("10"); int dogs = int.Parse("2"); // Version 1: use string interpolation. var s1 = Stopwatch.StartNew(); for (int i = 0; i < _max; i++) { string result = $"{cats} cats and {dogs} dogs"; if (result[0] != '1') { return; } } s1.Stop(); // Version 2: use string concat. var s2 = Stopwatch.StartNew(); for (int i = 0; i < _max; i++) { string result = cats + " cats and " + dogs + " dogs"; if (result[0] != '1') { return; } } s2.Stop(); // Version 3: use string format method. var s3 = Stopwatch.StartNew(); for (int i = 0; i < _max; i++) { string result = string.Format("{0} cats and {1} dogs", cats, dogs); if (result[0] != '1') { return; } } s3.Stop(); Console.WriteLine(s1.Elapsed.TotalMilliseconds); Console.WriteLine(s2.Elapsed.TotalMilliseconds); Console.WriteLine(s3.Elapsed.TotalMilliseconds); } } Output 376.5875 ms, String interpolation 293.1515 ms, Concat (+) 369.2315 ms, String Format

A summary. In these examples, we used string interpolation syntax. Any value-returning C# expression can be inserted into a string. Performance is similar to the Format method.
Dot Net Perls
© 2007-2020 Sam Allen. Every person is special and unique. Send bug reports to