将多个条件转换为三元操作员



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

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;

保持局部变量以简化

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

您可以拥有这样的三元运算符

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

我希望这会有所帮助。

您可以使用这样的三元运算符编写代码:

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检查,则需要在truefalse案例中。

我不确定虚拟分配是否会被优化,或者是否在"虚拟"情况下调用了设置器。如果调用了设置器,则可能会与您的原始代码产生不同的效果,具体取决于设置器代码的作用。

最新更新