Подтвердить что ты не робот

Шаблон resharper для определения арифметики с нулевыми типами

Может ли кто-нибудь подумать о хорошем шаблоне 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.

4b9b3361

Ответ 1

Это не полный ответ, но это лучшее, что я придумал до сих пор.

Образец:

$obj$ + $nullableObj$

obj - это выражение типа System.Object или один из его производных типов nullableObj - это выражение типа System.Nullable. (Обратите внимание, что вы не хотите, чтобы nullableObj включал производные типы).

Это не очень хорошее решение, потому что шаблон не обрабатывает коммутативность, поэтому вам нужно скопировать и вставить его и отменить выражения:

$nullableObj$ + $obj$

Кроме того, этот шаблон обрабатывает только десятичные числа, поэтому вам нужно скопировать и вставить его для каждого интересующего вас типа (да, это потенциально много шаблонов).

Одна из хороших новостей: символ + обрабатывает как сложение, так и вычитание, поэтому вам не нужно беспокоиться о вычитании.