2017-11-02 5 views
-3

他のオペレータが実行されていない場合は、以下のコードを確認してください。しかし、最初のセクションではすべての私の条件が偽になる場合は、それ以外に行くことはありません。いつも内部のコードを実行しています。時にそれが必要

具体的にはViewBag.gtQuickDateこのビューバックには次のような値は含まれていません。他のビューバッグには値が含まれていないため、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") 
{ 


} 
+4

@GiladGreen '&'ブール値を提供*非短絡*演算子は、です。 – Servy

+0

以前は、私もダブルを使用していましたが、同じ問題がありました。私は&と||を混在させていると思う演算子 –

+1

神の母親、これらの巨大な条件の代わりに、中間の 'bool'変数か適切な名前のメソッドを使用してください。 –

答えて

0

は、可能ならば、あなたは論理積から論理和を分けることができますが、試してください。

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 
    } 

・ホープ、このことができます。

1

誤って評価条件理由は||&より低い優先順位を有することであるので、gtQuickDateの任意の一致は、全条件がtrueにします。

予想通り、それは再コンパイルが必要な、一定期間後に動作停止するためには、コードに現在の年埋め込むことが一般的に非常に悪い考えです。

あなたは、最後の3年間からgtQuickDateを探しているなら、あなたはこのようにそれを行うことができます。

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

今、あなたの条件がblankOrLastThreeYears

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

リストのように書き換えることができます含まれています過去3年間のエントリーがあり、2018年、2019年などに自動的に更新されます。私はあなたがチェックしているものかどうか分からない

関連する問題