请检查以下代码。首先,如果部分但是我的所有条件都变得错误,那么它就不会发生。它始终运行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")
{
}
答案 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
}
希望这有帮助。