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;
在上面的例程中,我正在检查value
和storage
是否不同,如果相同,我们不需要再进一步,因此我们可以返回false
,否则我们可以执行我们的PropertyChanged
并返回true
。
【讨论】:
以上是关于SonarQube:添加一种方法来打破这种方法递归 C#的主要内容,如果未能解决你的问题,请参考以下文章