c# - 如何重新设计代码以解决 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 的警告并使代码不易出错?
解决方案
您应该避免使用魔术字符串并nameof
改用
public int Property2 {
get => (int)Properties[nameof(Property2)];
set => Properties[nameof(Property2)] = value;
}
推荐阅读
- javascript - 自定义函数未定义 Puppeteer
- mongodb - 无法从 Azure Functions 连接到 Atlas MongoDB
- ruby-on-rails - 由于与 yard gem 冲突,Sorbet `srb init` 与 Kernel#exit 失败
- vue.js - Vue.js 是否可以将数据添加到 AWS S3 存储桶中的文件?
- vba - 将所有文本框值从用户窗体推送到工作表单元格的 For 循环 - VBA
- python - 我的代码在到达 else 和 return 语句时继续运行,我在 if 语句中有递归?答案是 589.45
- pyspark - Pysaprk 数据框根据列唯一值 customerid 写入单独的文件和文件名
- php - PHP - 如何修复 I/O 函数调用在现实世界中不应该受到路径注入攻击?
- r - 如何在公式的右侧调用变量名的串联向量?
- pine-script - 索引 -1 超出范围,数组大小为 0