5

How does the compiler handle interpolated strings without an expressions?

string output = $"Hello World";

Will it still try to format the string? How does the compiled code differ from that of one with an expression?

1 Answer 1

10

For this C# code:

string output = $"Hello World";

int integer = 5;

string output2 = $"Hello World {integer}";

Console.WriteLine(output);

Console.WriteLine(output2);

I get this when I compile and then decompile (via ILSpy):

string value = "Hello World";
int num = 5;
string value2 = string.Format("Hello World {0}", num);
Console.WriteLine(value);
Console.WriteLine(value2);

So it seems that the compiler is smart enough not to use string.Format for the first case.

For completeness, here is the IL code:

IL_0000: nop
IL_0001: ldstr "Hello World"
IL_0006: stloc.0
IL_0007: ldc.i4.5
IL_0008: stloc.1
IL_0009: ldstr "Hello World {0}"
IL_000e: ldloc.1
IL_000f: box [mscorlib]System.Int32
IL_0014: call string [mscorlib]System.String::Format(string, object)
IL_0019: stloc.2
IL_001a: ldloc.0
IL_001b: call void [mscorlib]System.Console::WriteLine(string)
IL_0020: nop
IL_0021: ldloc.2
IL_0022: call void [mscorlib]System.Console::WriteLine(string)
IL_0027: nop
IL_0028: ret

It is clear here too that string.Format is only called for the second case.

Sign up to request clarification or add additional context in comments.

1 Comment

Thanks. That's what I was hoping was happening.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.