Skip to main content

C# String Interpolation

Introduction

String interpolation is a feature in C# that allows you to insert variable values and expressions directly into a string literal. Introduced in C# 6.0, string interpolation provides a more readable and convenient syntax for creating formatted strings compared to traditional string concatenation or string formatting methods.

With string interpolation, you can embed expressions inside string literals using the $ symbol and curly braces {}. This makes your code more concise and easier to understand, especially when working with complex string construction.

Basic String Interpolation Syntax

To use string interpolation:

  1. Prefix the string with the $ character
  2. Place expressions within curly braces {}
csharp
string name = "John";
int age = 30;

// Using string interpolation
string message = $"Hello, my name is {name} and I am {age} years old.";

Console.WriteLine(message);

Output:

Hello, my name is John and I am 30 years old.

Comparing String Interpolation with Other String Operations

Let's compare string interpolation with other methods of combining strings:

csharp
string name = "Sarah";
int age = 25;

// String concatenation
string concatString = "Hello, my name is " + name + " and I am " + age + " years old.";

// String.Format method
string formatString = string.Format("Hello, my name is {0} and I am {1} years old.", name, age);

// String interpolation
string interpolatedString = $"Hello, my name is {name} and I am {age} years old.";

Console.WriteLine(concatString);
Console.WriteLine(formatString);
Console.WriteLine(interpolatedString);

All three approaches produce the same output, but string interpolation is generally more readable and less error-prone, especially with multiple variables.

Using Expressions in String Interpolation

You can include any valid C# expression within the curly braces, not just variables:

csharp
int a = 5;
int b = 3;

Console.WriteLine($"The sum of {a} and {b} is {a + b}");
Console.WriteLine($"The product of {a} and {b} is {a * b}");
Console.WriteLine($"Is {a} greater than {b}? {a > b}");
Console.WriteLine($"The lowercase of {"HELLO"} is {"HELLO".ToLower()}");

Output:

The sum of 5 and 3 is 8
The product of 5 and 3 is 15
Is 5 greater than 3? True
The lowercase of HELLO is hello

Formatting Expressions in String Interpolation

String interpolation supports formatting expressions using the same format specifiers used in string.Format(). The format is specified after a colon inside the curly braces:

csharp
double price = 123.456;
DateTime today = DateTime.Now;

// Currency formatting
Console.WriteLine($"The price is {price:C}");

// Number formatting with decimal places
Console.WriteLine($"The value with 2 decimal places: {price:F2}");

// Date formatting
Console.WriteLine($"Today is {today:d}");
Console.WriteLine($"The full date and time: {today:F}");

// Percentage
Console.WriteLine($"Percentage: {0.75:P}");

// Custom numeric format
Console.WriteLine($"Phone number: {5551234567:###-###-####}");

Output (may vary based on your regional settings):

The price is $123.46
The value with 2 decimal places: 123.46
Today is 7/15/2023
The full date and time: Saturday, July 15, 2023 2:30:45 PM
Percentage: 75.00%
Phone number: 555-123-4567

Alignment and Spacing in String Interpolation

You can control the alignment and spacing of interpolated values using the format specifier's alignment component:

csharp
string name1 = "John";
string name2 = "Elizabeth";

// Right-align in a 10-character field
Console.WriteLine($"[{name1,10}]");
Console.WriteLine($"[{name2,10}]");

// Left-align in a 10-character field
Console.WriteLine($"[{name1,-10}]");
Console.WriteLine($"[{name2,-10}]");

Output:

[      John]
[Elizabeth]
[John ]
[Elizabeth ]

Combining Alignment and Format Specifiers

You can combine alignment with format specifiers:

csharp
double[] values = { 123.456, 78.9, 0.1234 };

Console.WriteLine("Value Table:");
Console.WriteLine("---------------------------------");
Console.WriteLine($"{"Number",-10}{"Currency",12}{"Percent",10}");
Console.WriteLine("---------------------------------");

foreach (double value in values)
{
Console.WriteLine($"{value,-10:F2}{value,12:C}{value,10:P0}");
}

Output:

Value Table:
---------------------------------
Number Currency Percent
---------------------------------
123.46 $123.46 12%
78.90 $78.90 8%
0.12 $0.12 0%

Escaping Braces in String Interpolation

If you need to include curly braces in your interpolated string, you can escape them by doubling them:

csharp
int value = 42;

// To display a single { or }, double it
Console.WriteLine($"The value is {{in brackets}}: {value}");

Output:

The value is {in brackets}: 42

Verbatim String Interpolation

You can combine verbatim string literals (prefixed with @) and string interpolation:

csharp
string filePath = "C:\\Program Files\\MyApp";
string fileName = "data.txt";

// Without verbatim string
Console.WriteLine($"File: {filePath}\\{fileName}");

// With verbatim string
Console.WriteLine($@"File: {filePath}\{fileName}");

Output:

File: C:\Program Files\MyApp\data.txt
File: C:\Program Files\MyApp\data.txt

The verbatim string version ($@"...") doesn't require double backslashes, making it more readable for file paths.

Real-World Applications

Building a Simple User Profile

csharp
string BuildUserProfile(string name, int age, string occupation)
{
return $@"
User Profile
------------------
Name: {name}
Age: {age}
Occupation: {occupation}
Created: {DateTime.Now:yyyy-MM-dd}
------------------";
}

string profile = BuildUserProfile("Alex Johnson", 28, "Software Developer");
Console.WriteLine(profile);

Output:

User Profile
------------------
Name: Alex Johnson
Age: 28
Occupation: Software Developer
Created: 2023-07-15
------------------

Generating HTML Content

csharp
string GenerateHtmlCard(string title, string content, string imageUrl)
{
return $@"<div class=""card"">
<img src=""{imageUrl}"" alt=""{title}"">
<div class=""container"">
<h4><b>{title}</b></h4>
<p>{content}</p>
</div>
</div>";
}

string card = GenerateHtmlCard(
"Mountain View",
"Beautiful scenery of mountains at sunset",
"https://example.com/mountains.jpg"
);

Console.WriteLine(card);

Building a SQL Query

csharp
string BuildSqlQuery(string tableName, string[] columns, int limit)
{
string columnList = string.Join(", ", columns);
return $"SELECT {columnList} FROM {tableName} LIMIT {limit};";
}

string query = BuildSqlQuery("Users", new[] { "Id", "Name", "Email" }, 10);
Console.WriteLine(query);

Output:

SELECT Id, Name, Email FROM Users LIMIT 10;

Summary

String interpolation in C# provides a clean, readable way to embed expressions within string literals. Key points to remember:

  • Prefix the string with $ to enable interpolation
  • Place expressions within curly braces {}
  • You can include any valid C# expression inside the braces
  • Format specifiers can be added after a colon (e.g., {value:C})
  • Alignment can be controlled with comma and a number (e.g., {value,10})
  • Combine with verbatim strings ($@"...") for multiline strings without escaping
  • Double curly braces to escape them ({{ and }})

String interpolation makes your code more readable and maintainable compared to string concatenation or the string.Format() method, especially when dealing with complex string construction.

Exercises

  1. Create a program that asks a user for their name, age, and favorite color, then displays a formatted message using string interpolation.

  2. Write a method that takes a decimal price and a quantity, then returns a receipt-like string showing the item price, quantity, and total with proper currency formatting.

  3. Create a temperature converter that takes a temperature in Celsius and displays it in both Celsius and Fahrenheit using string interpolation with appropriate formatting.

  4. Build a method that generates a simple table of multiplication results for a given number, with proper alignment using string interpolation.

Additional Resources



If you spot any mistakes on this website, please let me know at [email protected]. I’d greatly appreciate your feedback! :)