A common code smell that can hinder the clarity of source code is making assignments within sub-expressions. This practice involves assigning a
value to a variable inside a larger expression, such as within a loop or a conditional statement.
This practice essentially gives a side-effect to a larger expression, thus making it less readable. This often leads to confusion and potential
errors.
Exceptions
Assignments inside lambda and delegate expressions are allowed.
var result = Foo(() =>
{
int x = 100; // dead store, but ignored
x = 200;
return x;
}
The rule also ignores the following patterns:
var a = b = c = 10;
- Assignments that are part of a condition of an
if
statement or a loop
while ((val = GetNewValue()) > 0)
{
...
}
- Assignment in the right-hand side of a coalescing operator
private MyClass instance;
public MyClass Instance => instance ?? (instance = new MyClass());