首页 > 解决方案 > 如何重新设计代码以解决 SonarQube“获取器和设置器应访问预期字段”错误?

问题描述

示例代码:

public class Foo: Bar
{
    protected static readonly string Property1Name = "Property1";
    protected static readonly string Property2Name = "Property2";

    public string Property1
    {
        get => (string)Properties[Property1Name];
        set => Properties[Property1Name] = value;
    }

    public int Property2
    {
        get => (int)Properties[Property2Name];
        set => Properties[Property2Name] = value;
    }
}

Properties集合在基类中定义并用于PropertyGrid. 真正的代码要复杂得多——还有其他类派生Bar和使用Properties(数百个属性)。

SonarQube 在 and 的 getter 和 setter 中发现了Property1错误Property2

Getter 和 setter 应该访问预期的字段

我可以禁止或禁用 SonarQube 的规则,但上面的代码很容易出错 - 如果开发人员复制/粘贴代码,它可能最终会出现如下内容:

    public double Property3
    {
        get => (double)Properties[Property3Name];
        set => Properties[Property2Name] = value;
    }

寻找上述错误并不是一件容易的事。

任何想法如何重新设计代码以修复 SonarQube 的警告并使代码不易出错?

标签: c#sonarqube

解决方案


您应该避免使用魔术字符串并nameof改用

public int Property2 {
    get => (int)Properties[nameof(Property2)];
    set => Properties[nameof(Property2)] = value;
}

推荐阅读