Why is this an issue?
Assignments within sub-expressions are hard to spot and therefore make the code less readable. Ideally, sub-expressions should not have
side-effects.
Noncompliant code example
if (string.IsNullOrEmpty(result = str.Substring(index, length))) // Noncompliant
{
//...
}
Compliant solution
var result = str.Substring(index, length);
if (string.IsNullOrEmpty(result))
{
//...
}
Exceptions
Assignments inside lambda and delegate expressions are allowed.
Furthermore, the following patterns are also accepted:
var a = b = c = 10;
while ((val = GetNewValue()) > 0)
{
...
}
private MyClass instance;
public MyClass Instance
{
get
{
return instance ?? (instance = new MyClass());
}
}
Resources