SonarQube:添加一种方法来打破这种方法递归 C#

Posted

技术标签:

【中文标题】SonarQube:添加一种方法来打破这种方法递归 C#【英文标题】:SonarQube: Add a way to break out of this methods recursion C# 【发布时间】:2021-11-26 22:55:29 【问题描述】:

我们最近开始在我们的项目中使用 SonarQube。因此,当我构建项目时,它给出了一个严重错误:“添加一种方法来打破这种方法的递归”。这是代码

private Bool SetProperty<T>(T storageField, T value, [CallerMemberName] string pName= "" )
  
    return SetProperty<T>(storageField, value, pName);
  

你们知道如何以 SonarQube 不会抱怨的方式解决这个问题吗?

【问题讨论】:

这个方法有没有被调用过? @CaiusJard 是的 那么它目前是如何完成的?为什么不溢出堆栈? 【参考方案1】:

您的方法正在调用自己,您必须打破递归模式。

【讨论】:

对。这意味着“添加一种方法来打破这个方法的递归”就是它所说的。 这是一个现有代码,我正在努力摆脱 sonarqube 错误。不知道如何 通过删除递归。看看这个方法是如何调用自己的?这是一个无限循环。 这并没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review @camille 您将向我解释说“您的方法正在调用自身”并不能回答这个问题......【参考方案2】:

“添加一个方法来打破这个方法的递归”

如前所述,您需要打破常规,它会一遍又一遍地调用自己。看来您正在尝试实现INotifyPropertyChanged 接口,假设因为您已标记wpf

尝试如下改变你的日常生活:

protected bool SetProperty<T>(ref T storage, T value, [CallerMemberName] string propName = "")

   if (EqualityComparer<T>.Default.Equals(storage, value)) return false;
      storage = value;
      OnPropertyChanged(propName);
      return true;

在上面的例程中,我正在检查valuestorage是否不同,如果相同,我们不需要再进一步,因此我们可以返回false,否则我们可以执行我们的PropertyChanged 并返回true

【讨论】:

以上是关于SonarQube:添加一种方法来打破这种方法递归 C#的主要内容,如果未能解决你的问题,请参考以下文章

向熊猫数据框添加一列

使用 Python 在日期末尾添加一年

java 添加一组元素

在 SQL Server 中,表添加一列。导致视图错误

适配器方法惯用法

设计模式5:工厂方法模式