Преобразовать оператор if / else в?: Operator C# - PullRequest
0 голосов
/ 29 мая 2020

Я хотел бы уменьшить свой код до чего-то лучшего. Вот почему я пытаюсь преобразовать оператор if / else в оператор?:

Мой фактический код выглядит так:

if (resultat.CodeAlgo != null)
 {
    worksheet.Cells[ligne, 7].Value = resultat.CodeAlgo.ToString();
 }
else
 {
    worksheet.Cells[ligne, 7].Value = string.Empty;
}

Я пытался преобразовать в:

resultat.CodeAlgo != null
  ? worksheet.Cells[ligne, 7].Value = resultat.CodeAlgo.ToString()
  : worksheet.Cells[ligne, 7].Value = string.Empty;

Но он сказал:

Только оператор присваивания, вызова, увеличения, декремента и нового объекта может использоваться в качестве оператора.

Я впервые используя этот оператор, и я не понимаю, почему мое упрощение неверно?

Ответы [ 2 ]

4 голосов
/ 29 мая 2020

Вам нужно назначить результат тернарной операции

worksheet.Cells[ligne, 7].Value = resultat.CodeAlgo != null
                ?  resultat.CodeAlgo.ToString()
                :  string.Empty;

или вы можете использовать оператор объединения с нулевым значением ??,

worksheet.Cells[ligne, 7].Value = resultat.CodeAlgo?.ToString() ?? string.Empty;

Ternary Оператор ?:

Синтаксис тернарного оператора:

 output = condition ? expression 1 : expression 2;
  • Если условие равно true, то результат expression 1 присваивается переменной output, иначе expression 2 будет назначен.

Оператор объединения с нулевым значением ?? ( Из MSDN )

оператор ?? возвращает значение своего левого операнда, если оно не равно нулю; в противном случае он оценивает правый операнд и возвращает свой результат. ?? оператор не оценивает свой правый операнд, если значение левого операнда не равно нулю.

Нулевой условный оператор ?.

Если вы заметили во втором решении, Я использовал оператор ?., этот оператор называется условным оператором null . Этот оператор выполняется, только если resultat.CodeAlgo не равно нулю. Он вернет null, если resultat.CodeAlgo имеет значение null, это поможет нам избежать исключения нулевой ссылки.

2 голосов
/ 29 мая 2020

Вы присваиваете значение workheet.Cells [ligne, 7] .Value. поэтому код должен быть

worksheet.Cells[ligne, 7].Value = resultat.CodeAlgo != null ? resultat.CodeAlgo.ToString() : string.Empty;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...