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());
  }
}

See