Конвертировать несколько, если условие в тернарный оператор - PullRequest
0 голосов
/ 21 мая 2019

Я хочу преобразовать приведенное ниже условие в троичное

if (!string.IsNullOrEmpty(objModel.Status))
{
    if (objModel.Status == "0")
    {
        Model.Sort = "Result1";
    }
    else if (objModel.Status == "8")
    {
        Model.Sort = "Result2";
    }
    else 
    {
        Model.Sort = "Result3"; 
    }
}

Я попытался, как показано ниже, но это пошло вверх, если и не иначе, если

Model.Sort = !string.IsNullOrEmpty(Model.Status) 
    ? (Model.Status == "0" ? Retult1 : string.Empty) 
    : string.Empty;

Ответы [ 3 ]

0 голосов
/ 21 мая 2019

Вы можете написать свой код, используя троичные операторы, например:

Model.Sort = string.IsNullOrEmpty(objModel.Status)    //    if (string.IsNullOrEmpty(Status))
    ? Model.Sort                                      //        Model.Sort = Model.Sort;
    : objModel.Status == "0"                          //    else if (Status == "0")
        ? "Result1"                                   //        Model.Sort = "Result1";
        : objModel.Status == "8"                      //    else if (Status == "8")
            ? "Result2"                               //        Model.Sort = "Result2";
            : "Result3";                              //    else Model.Sort = "Result3";

Где первое условие представляет условие if, а затем каждый оператор после оператора :, который представляет собой сравнение, представляетelse if, и, наконец, результат после последнего : представляет окончательное присваивание else.

Первое условие является своего рода «фиктивным» условием (потому что, если оно истинно, ничего действительно не меняется *),но требуется, если мы хотим включить проверку IsNullOrEmpty в троичные операции, поскольку троичный оператор должен возвращать значение как в true, так и false случаях.

I 'Я не уверен, что фиктивное назначение будет оптимизировано или вызовет сеттер в этом "фиктивном" случае.Если вызывается сеттер, то потенциально это может иметь другой эффект, чем ваш исходный код, в зависимости от того, что делает код сеттера.

0 голосов
/ 21 мая 2019

Сохраняйте локальную переменную для упрощения

var x = objModel.Status;
if (string.IsNullOrEmpty(x))
{
    Model.Sort = x=="0" ? "Result1" :
        x=="8" ? "Result2" :
            "Result3";
}
0 голосов
/ 21 мая 2019

у вас может быть троичный оператор, подобный этому

a ? b : c ? d : e

чтобы получить это:

if (a) {
  b
}
else if (c) {
{
  d
}
else {
  e
}

в вашем случае

objModel.Status == "0" ? Model.Sort = "Result1" : objModel.Status == "8" ? Model.Sort = "Result2" : Model.Sort = "Result2";

Надеюсь, это поможет.

...