如果将条件转换为三元运算符

时间:2019-05-21 18:35:17

标签: c# ternary-operator

我想将以下条件转换为三元

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 :(得分:0)

您可以像这样使用三元运算符

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";

我希望这会有所帮助。

答案 1 :(得分:0)

您可以使用三元运算符来编写代码,如下所示:

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,最后一个结果位于最后一个{{1 }}代表最终的:分配。

第一个条件是一种“虚拟”条件(因为如果它是真的,什么都不会真正改变*),但是如果我们想在三元运算中包括else检查,这是必需的,因为三元运算符具有在IsNullOrEmptytrue中都返回一个值。

我不确定是否可以优化虚拟分配,或者在这种“虚拟”情况下调用setter。如果调用了setter,则根据setter代码的作用,这可能会与原始代码产生不同的影响。

答案 2 :(得分:0)

保留局部变量以简化操作

var x = objModel.Status;
if (string.IsNullOrEmpty(x))
{
    Model.Sort = x=="0" ? "Result1" :
        x=="8" ? "Result2" :
            "Result3";
}