【问题标题】:SonarQube: Add a way to break out of this methods recursion C#SonarQube:添加一种方法来打破这种方法递归 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 是的
  • 那么它目前是如何完成的?为什么不溢出堆栈?

标签: c# .net wpf sonarqube


【解决方案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

【讨论】:

    猜你喜欢
    • 2019-12-29
    • 2020-12-19
    • 2012-11-08
    • 2014-10-14
    • 2018-05-03
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多