ReSharper 2017.1 Help

Code Inspection: '??' condition is known to be always null or not null

If you want to assign a value, pass an argument, or return from a method based on the nullability of an identifier, the clearest syntax you can use in these cases is the ?? (null-coalescing) operator.

However, redundant null-coalescing expressions produce dead code and impede readability. The left-hand operand is evaluated first, and if it is null, the right-hand operand is evaluated and the result becomes the result of the whole expression. As it follows from the logic of the ?? operator, using null as the right-hand operand does not make sense. In the example below, ReSharper suggests removing the right-hand operand null together with the ?? operator, because if the newCategory is null, then null will be assigned to the Category anyway:

Suboptimal codeAfter the quick-fix
public class Customer { public string Category { get; set; } private void ChangeCategory(string newCategory) { Category = category ?? null; } /* … */ }
public class Customer { public string Category { get; set; } private void ChangeCategory(string newCategory) { Category = category; } /* … */ }

Another situation when the null-coalescing operator is redundant is when the left-hand operand can never be null. In this case, the right-hand operand never gets reached and ReSharper suggests removing the unreachable code:

Suboptimal codeAfter the quick-fix
string name = "John"; Console.WriteLine(name ?? "empty");
string name = "John"; Console.WriteLine(name);

See Also

Last modified: 4 July 2017