考虑以下遗留代码:
public class Foo
{
public void Blah(string frob)
{
if (frob == null)
throw new ArgumentException("frob");
}
public string nameof()
{
//boring code
}
}
现在想象一下这段代码的一部分正在被重构,我们想Blah
通过以下方式重构:
public void Blah(string frob)
{
if (frob == null)
throw new ArgumentException(nameof(frob)); //nameof contextual keyword
}
此解析器不会选择上下文关键字nameof
,并将解析为nameof
给出编译时错误(没有现有重载)的私有方法。为什么?如果方法是 . 我会理解这一点nameof(object o)
。
有什么办法可以让编译器解析为内置的nameof
?我需要重构重命名方法的代码吗?
上面的例子是一个非常简化的场景,实际上该nameof
方法在反射中被广泛使用,并且需要花费时间和精力来确保在任何地方都正确地进行了重命名。