2つの「HelloWorld」プログラムがあります。
static void Main(string[] args) {
Console.WriteLine("Hello World");
}
と
static void Main(string[] args) {
string hw = "Hello World";
Console.WriteLine(hw);
}
これらのそれぞれに対して生成されるILコードは次のとおりです。
IL_0001: ldstr "Hello World"
IL_0006: call System.Console.WriteLine
と
IL_0001: ldstr "Hello World"
IL_0006: stloc.0 // hw
IL_0007: ldloc.0 // hw
IL_0008: call System.Console.WriteLine
私の質問は、なぜそうしなかったのか、C#コンパイラはこれをデフォルトで最適化するのですか?