3

次のコードがあるとします:

Console.WriteLine("Value1: " + SomeEnum.Value1.ToString() + "\r\nValue2: " + 
                    SomeOtherEnum.Value2.ToString());

コンパイラはこれを次のように最適化します。

Console.WriteLine("Value1: " + SomeEnum.Value1 + "\r\nValue2: " +
                         SomeOtherEnum.Value2);

IL 逆アセンブラーで確認したところ、次の呼び出しがあります。 IL_005a: callvirt instance string [mscorlib]System.Object::ToString()

JIT がこれを最適化するかどうかはわかりません。

4

1 に答える 1

3

いいえ、逆です。これ:

Console.WriteLine("Value1: " + SomeEnum.Value1 + "\r\nValue2: " +
                     SomeOtherEnum.Value2);

コンパイラによって次の (と同等の) ものに変換されます。

string s = String.Concat("Value1: ", SomeEnum.Value1.ToString(), "\r\n Value2: ", SomeOtherEnum.Value2.ToString());
Console.WriteLine(s);

どちらの場合も、同じ IL が生成されます。JITがそれを次のように変えるかどうかを尋ねている場合:

string s = String.Concat("Value1: ", "Value1", "\r\n Value2: ", "Value2");
Console.WriteLine(s);

答えはノーです。なぜそれがあなたにとって問題になるのだろうか?

于 2010-05-31T04:36:12.593 に答える