if else运算符应该在什么时候运行

时间:2017-11-02 14:26:40

标签: c# asp.net-mvc

请检查以下代码。首先,如果部分但是我的所有条件都变得错误,那么它就不会发生。它始终运行if inside代码。

更具体的ViewBag.gtQuickDate此viewbag不包含任何值,如下所示,其他viewbags也不包含该值,那么为什么它不运行else if?你在操作员身上发现的任何错误都告诉我。

if (ViewBag.subcattxt != "" & ViewBag.callFrom == "result" & 
     ViewBag.gtQuickDate != "2015y" || ViewBag.gtQuickDate != "2016y" || 
      ViewBag.gtQuickDate != "2017y" || ViewBag.gtQuickDate != "blank")
{


}
else if (ViewBag.subcattxt != "" & ViewBag.callFrom == "result" & 
          ViewBag.gtQuickDate == "2015y" || ViewBag.gtQuickDate == "2016y" ||
           ViewBag.gtQuickDate == "2017y" || ViewBag.gtQuickDate != "blank")
{


}

2 个答案:

答案 0 :(得分:1)

条件评估错误的原因是||的优先级低于&,因此gtQuickDate的任何匹配都会使整个条件成为真。

将当前年份嵌入到代码中通常是一个非常糟糕的主意,因为它在一段时间后停止按预期工作,需要重新编译。

如果您在过去三年中寻找gtQuickDate,可以这样做:

int yearNow = DateTime.Now.Date.Year;
var blankOrLastThreeYears = new[] {
    "blank"
,  $"{yearNow - 0}y"
,  $"{yearNow - 1}y"
,  $"{yearNow - 2}y"
};

现在你的病情可以改写为

if (ViewBag.subcattxt != ""
&& ViewBag.callFrom == "result"
&& blankOrLastThreeYears.Contains(ViewBag.gtQuickDate)) {
    ...
}

blankOrLastThreeYears中的列表将包含过去三年的条目,并将自动更新2018年,2019年等。

答案 1 :(得分:0)

我不确定你在检查什么,如果可能的话,你可以将OR与AND分开,但请尝试:

  if ((!(ViewBag.subcattxt.Equals(null)) && (!(ViewBag.callFrom.Equals("result"))) && (!(ViewBag.gtQuickDate.Equals("2015y"))))
  {    
     //some other code
  }
  else if((!(ViewBag.gtQuickDate.Equals("2016y")) || (!(ViewBag.gtQuickDate.Equals("2017y")) || (!(ViewBag.gtQuickDate.Equals("blank"))))
  {
  //some other code
  }
  else if (ViewBag.subcattxt.Equals(null) && ViewBag.callFrom.Equals("result") && ViewBag.gtQuickDate.Equals("2015y"))
  {    
     //some other code
  }
  else if(ViewBag.gtQuickDate.Equals("2016y") || ViewBag.gtQuickDate.Equals("2017y") || ViewBag.gtQuickDate.Equals("blank"))
  {
     //other code
  }

希望这有帮助。