Resharper模式检测可空类型的算术

cbp*_*cbp 11 c# resharper

任何人都可以想到将会检测到以下错误的良好Resharper模式:

decimal? x = null;

decimal? y = 6M;

var total = x + y;

Console.WriteLine(total); // Result is null
Run Code Online (Sandbox Code Playgroud)

我已经尝试创建一个模式,但我无法弄清楚如何快速处理所有类型的算术(例如+, - ,*等)和任何可空类型(e.g. Nullable<int>, Nullable<decimal>, Nullable<double> etc).我也无法处理交换(例如,它应该检测x + y以及y + x).

请注意,我不一定需要检测x是否实际为null:只是它是否为可空类型.我想强迫开发人员写:x.Value + y.Value.

cbp*_*cbp 3

这不是完整的答案,但这是迄今为止我想到的最好的答案。

模式是:

$obj$ + $nullableObj$
Run Code Online (Sandbox Code Playgroud)

obj是“ System.Object 类型的表达式或其派生类型之一”。 nullableObj是“ System.Nullable 类型的表达式”。(请注意,您不希望 nullableObj 包含派生类型)。

这不是一个很好的解决方案,因为该模式不处理交换性,因此您需要复制并粘贴它并反转表达式:

$nullableObj$ + $obj$
Run Code Online (Sandbox Code Playgroud)

此外,此模式仅处理十进制,因此您需要为您感兴趣的每种类型复制并粘贴它(是的,这可能有很多模式)。

好消息是:+符号可以处理加法和减法,因此您无需担心减法。