从我可以读取的内容来看,编译器只发出一个字符串,而没有其他任何事情发生?

这个电话的结果有什么理由不能被实习吗?对于 nameof(MyClass) ,如果它经常发生,理论上是否值得?

最佳答案

是的,它将像任何其他字符串文字一样被实习。

这可以用 this TryRoslyn example 来证明,其中:

public void M()
{
    Console.WriteLine(nameof(M));
}

符合本IL:
.method public hidebysig
    instance void M () cil managed
{
    // Method begins at RVA 0x2050
    // Code size 11 (0xb)
    .maxstack 8

    IL_0000: ldstr "M"
    IL_0005: call void [mscorlib]System.Console::WriteLine(string)
    IL_000a: ret
} // end of method C::M

你可以看到 "M" 正在使用 ldstr 加载,这意味着它被实习:



来自 OpCodes.Ldstr Field

这也可以通过运行这个打印 true 的例子来验证:
Console.WriteLine(ReferenceEquals(nameof(Main), nameof(Main)));

关于c# - c# 6.0 nameof() 结果是实习的吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31993152/

10-11 21:56