【问题标题】:Is this nameof() truly a recursive call?这个 nameof() 真的是递归调用吗?
【发布时间】:2016-03-18 17:32:36
【问题描述】:

我现在正在用 C# 制作一个 ConfigurationSection。我决定通过使用 nameof(PropertyName) 而不是硬编码字符串来利用一些 C# 6 功能。

但是,我从 Resharper 那里得到了一个关于递归调用的奇怪结果。

这是一个例子:

我明白为什么它会给出这个警告,因为该属性是在其内部被引用的。然而,我不相信这是实际上递归的。

这个电话有什么我需要担心的吗?

【问题讨论】:

  • 对我来说听起来像是一个更清晰的错误。在第 35 行添加一个断点并在调试器中单步执行它,如果它不止一次在 nameof(CoreApiRootUrl) 上停止,您就会知道它是否重复出现。
  • nameof 听起来像是使用反射的简写代码,可能是他们编写的方式。

标签: c# recursion resharper nameof


【解决方案1】:

除非this[string] 调用CoreApiRootUrl,否则它不是递归的。

你说得对,nameof(...) 实际上根本没有打电话。

我刚刚验证我在一个小型测试类中看到了相同的错误(使用 R# 10.0.1):

public class Bug
{
    public string this[string x] => "";

    public string Foo
    {
        get { return this[nameof(Foo)]; } // Warning here
    }
}

奇怪的是,如果我将 Foo 更改为表达式主体属性:

public string Foo => this[nameof(Foo)];

我没有看到警告。

绝对是一个 R# 错误 - 将其提交给 Jetbrains。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
相关资源
最近更新 更多