3

假设我有以下代码:

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

将编译器优化为:

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

我已经用 IL Disassembler 检查了它,并且有调用 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 回答