任何人都可以想到可以检测到以下错误的良好Resharper模式:
decimal? x = null;
decimal? y = 6M;
var total = x + y;
Console.WriteLine(total); // Result is null
我尝试过创建模式,但我无法弄清楚如何快速处理所有类型的算术(例如+, - ,*等)和任何可空类型(e.g. Nullable<int>, Nullable<decimal>, Nullable<double> etc
)。此外,我无法处理交换(例如,它应该检测 x + y 以及 y + x )。
请注意,我不一定需要检测 x 是否实际为空:只是它是否为可空类型。我想强迫开发人员写:x.Value + y.Value。
答案 0 :(得分:3)
这不是一个完整的答案,但这是我迄今为止最好的答案。
模式是:
$obj$ + $nullableObj$
obj 是System.Object类型的&#34; 表达式或其派生类型之一 nullableObj 是System.Nullable &#34;类型的&#34; 表达式。 (请注意,您不希望nullableObj包含派生类型)。
这不是一个很好的解决方案,因为模式不能处理交换,所以你需要复制并粘贴它并反转表达式:
$nullableObj$ + $obj$
此外,此模式仅处理十进制,因此您需要为您感兴趣的每种类型复制并粘贴它(是的,这可能是很多模式)。
一条好消息: + 符号处理加法和减法,因此您不必担心减法。