11

谁能想到可以检测以下错误的良好 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。

4

1 回答 1

3

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

模式是:

$obj$ + $nullableObj$

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

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

$nullableObj$ + $obj$

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

一条好消息:+符号同时处理加法和减法,因此您无需担心减法。

于 2012-07-24T04:33:03.793 回答