İçeriğe geç

Koşulsuz özyineleme (ARCH717)

Anahtar dotnet.codequality.unconditional-recursion · Önem critical · Kategori codequality

Her yolda kendini çağıran bir metodu ya da kendini okuyan bir property getter’ını işaretler: çağrıdan önce dönebilecek, hata fırlatabilecek ya da dallanabilecek hiçbir şey yoktur, özyineleme hiç bitmez ve süreç stack overflow ile çöker.

Bir çıkış yolu olan özyineleme normal koddur. if, döngü, switch, try ya da lambda içindeki, ya da ?:, &&, ||, ??, ?. arkasındaki bir çağrı raporlanmaz. Başka bir overload’a ya da base’e yapılan çağrı da raporlanmaz. Kendine atama yapan setter Sonsuz özyineleme (CA2011) kuralıdır.

public string Name => Name;
public int Sum(int n)
{
var doubled = n * 2;
return Sum(doubled);
}
private string _name = "";
public string Name => _name;
public int Sum(int n)
{
if (n <= 0) return 0;
return n + Sum(n - 1);
}