Code inspection: Conditional access qualifier expression is not null according to nullable reference types' annotations
If nullable reference types (NRT) are enabled, this inspection reports redundant conditional access operators (?.
) for expressions that are guaranteed not to be null
due to the nullable context and annotations.
In the example below, GetRnd()
is declared with the return type Rnd
(without the ?
annotation), which means that the return value will never be null in the nullable-aware context. Since rnd
gets this return value, it will be also considered as non-nullable, making conditional access operator ?.
in rnd?.TrueOrFalse
unnecessary. Therefore, ReSharper suggests replacing rnd?.TrueOrFalse
with rnd.TrueOrFalse
.
NRT improve overall precision of the nullability analysis, but there are cases when NRT contracts can be violated, for example, when values are coming from code without #nullable
context. In such cases, you may get false positive warnings for nullability checks . You can choose to ignore nullable API contracts and report a problem only when previous operations with the value in your code guarantee that it can or cannot be null.
You can change this behavior right from the Alt+Enter menu:
... or using the Nullable reference types' warnings mode option on the page of ReSharper options .
When ReSharper ignores nullable API contracts, nullability analysis relies on the program control flow to report redundant null checks. It will use another inspection for that. For example:
For more information about NRT and how ReSharper supports them, watch this webinar recording: