C# 用于检测具有可空类型的算法的Resharper模式

C# 用于检测具有可空类型的算法的Resharper模式,c#,resharper,C#,Resharper,有谁能想出一个好的重新竖琴模式来检测以下错误: decimal? x = null; decimal? y = 6M; var total = x + y; Console.WriteLine(total); // Result is null 我尝试过创建一个模式,但我不知道如何快速处理所有类型的算术(例如+、-、*等)和任何可空类型(,例如可空、可空、可空等)。此外,我不能处理交换性(例如,它应该检测x+y以及y+x) 注意,我不一定需要检测x是否实际为null:只需要检测它是否是可

有谁能想出一个好的重新竖琴模式来检测以下错误:

decimal? x = null;

decimal? y = 6M;

var total = x + y;

Console.WriteLine(total); // Result is null
我尝试过创建一个模式,但我不知道如何快速处理所有类型的算术(例如+、-、*等)和任何可空类型(
,例如可空、可空、可空等)。此外,我不能处理交换性(例如,它应该检测x+y以及y+x)


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

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

模式是:

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

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

$nullableObj$ + $obj$
而且,这个模式只处理十进制数,所以您需要为您感兴趣的每种类型复制并粘贴它(是的,这可能有很多模式)


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

erm nullable只是一个泛型类。nullable结构为什么不启用此模式:“nullable?”“不要检查
x+y
模式,而是寻找一个
null
,该模式已被肯定地分配了
null
,并且在左侧或右侧都没有
+
-
*
^
*
(或
-=
+=
,…在其左侧).cbp最坏情况下,你复制粘贴每种算术支持类型的模式。虽然你不会考虑其他类型的操作符,但是,你需要泛化它。为什么它不能用<代码>可空的< /代码>?@ yyyy-是的,绝对是最坏的情况。有很多类型支持算术运算器。除非我能支持交换性,否则模式的不同复制和粘贴版本的数量将迅速增加。@yorye我不确定我是否理解你的意思-你能举个模式的例子吗。