我们最近开始在我们的项目中使用SonarQube。因此,当我构建这个项目时,它给出了一个严重的错误:"添加一个方法来打破这个方法的递归"。下面是代码
private Bool SetProperty<T>(T storageField, T value, [CallerMemberName] string pName= "" )
{
return SetProperty<T>(storageField, value, pName);
}
你们知道如何解决这个问题,让SonarQube不会抱怨吗?
"添加一种方法来跳出此方法的递归">
就像前面提到的,你需要打破常规,因为它一遍又一遍地调用自己。看起来你正在尝试实现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
。
你的方法正在调用自己,你必须打破递归模式。