Избегать вложения if / else if, а также избегать InvalidOperationException одновременно в условном выражении - PullRequest
0 голосов
/ 13 мая 2019

Я столкнулся с этим огромным методом, где у меня есть много операторов if else типа

else if (ptName == "Missile" ||
         ptName == "Telephone" ||
        (ptName.StartsWith("Car") && gasTank.ValueFloat1.Value < 90))
        {
         foo_1 = "some_string";
        }

К сожалению, этот код не совсем корректен, поскольку переменная gasTank определяется только в тех случаях, когда ptName начинается со строки «Car». Таким образом, во время выполнения я получаю

Возникла InvalidOperationException: нулевой объект должен иметь значение.

Эту проблему можно решить, вложив ifs и else if, а также повторив условие ptName.StartsWith("Car"), хотя это крайне нежелательно.

Разделение метода на множество маленьких или добавление возврата после каждого условия не является опцией, поскольку возвращение метода представляет собой объединение различных foo_i.

Заранее спасибо.

1 Ответ

4 голосов
/ 13 мая 2019

Состояние

ptName.StartsWith("Car")

должно стать

ptName?.StartsWith("Car") ?? false

Это избавит вас от null значения.

Если вы используете версию C # ниже 6, то вы должны использовать:

ptNAme == null ? false : ptName.StartsWith("Car")

Еще одно обновление:

(gasTank.ValueFloat1?.Value ?? 0) < 90

или

(gasTank.ValueFloat1.HasValue ? gasTank.ValueFloat1.Value : 0) < 90
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...