从我可以读取的内容来看,编译器只发出一个字符串,而没有其他任何事情发生?
这个电话的结果有什么理由不能被实习吗?对于 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/