编程语言
首页 > 编程语言> > 没有表达式的C#字符串插值如何编译?

没有表达式的C#字符串插值如何编译?

作者:互联网

编译器如何处理没有表达式的内插字符串?

string output = $"Hello World";

仍然会尝试格式化字符串吗?编译后的代码与带有表达式的代码有何不同?

解决方法:

对于此C#代码:

string output = $"Hello World";

int integer = 5;

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

Console.WriteLine(output);

Console.WriteLine(output2);

我在编译然后通过ILSpy反编译时得到了这个:

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

因此,似乎编译器足够聪明,在第一种情况下不使用string.Format.

为了完整起见,下面是IL代码:

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

这里也很清楚string.Format仅在第二种情况下被调用.

标签:string-interpolation,c-6-0,c
来源: https://codeday.me/bug/20191027/1941332.html