2017-04-04 23 views
0

我有一個if語句變量有一個空值,但如果聲明中仍然得到所謂

if (materialtype != "WINDOWVINYLREPL" 
    || materialtype != "ROOFING" 
    && materialtype != "null" 
    && materialtype != null) 
{     
    subtype = (from a in UEF.MaterialSubTypes 
       where a.MaterialSubType1.Equals(subtype) && a.Code.Contains(materialtype) 
       select a.Code).FirstOrDefault(); 
} 

而且即使materialtype等於空if語句仍然被調用,它不應該是

+4

你的第一個''||是短路剩下的條件。如果'materialtype!=「WINDOWVINYLREPL',那麼這就是一個真實的陳述,這就像輸入代碼塊需要知道的|| || – Abion47

+0

那麼,如果'materialtype'爲'null',那麼'materialtype!= 「WINDOWVINYLREPL」是'true',所以'if'的主體被執行是合乎邏輯的,爲什麼你會期望有什麼不同?如果你希望在'null'時不執行它,那麼修改表達式。 – Jesper

+2

TRUE OR FALSE = TRUE'這不是短路問題,這是正確的行爲。第一個比較結果爲TRUE –

回答

9
if (materialtype != "WINDOWVINYLREPL" || ... 

變量爲空所以肯定這不是等於「WINDOWVINYLREPL」,因此這種情況是真實的,它進去。

0

你有一個OR ||條件。它應該是這樣的:

if (materialtype != "WINDOWVINYLREPL" && materialtype != "ROOFING" && materialtype != "null" && materialtype != null) 
    {     
     subtype = (from a in UEF.MaterialSubTypes where a.MaterialSubType1.Equals(subtype) && a.Code.Contains(materialtype) select a.Code).FirstOrDefault(); 
    } 
0

條件沒有寫入正確的括號。 AND,OR衝突

if ((materialtype != "WINDOWVINYLREPL") || (materialtype != "ROOFING" && materialtype != "null")) && materialtype != null) 
    {     
     subtype = (from a in UEF.MaterialSubTypes where a.MaterialSubType1.Equals(subtype) && a.Code.Contains(materialtype) select a.Code).FirstOrDefault(); 
    } 
0

你的條件相當於:

if((materialtype != "WINDOWVINYLREPL") || (materialtype != "ROOFING" && materialtype != "null" && materialtype != null)) 

如果materialtype == NULL,因爲(materialtype != "WINDOWVINYLREPL")是真的哪個是真的。

該& &運算符具有比||更高的優先級。

+0

我認爲這會做同樣的事情,並輸入if塊。即使'||'運算符的右邊是False,左邊也可能是真的(假設'materialtype'有兩個以上的值)。 –

+0

@ChrisDunaway這就是我所說的,我正在解釋這個問題,而不是糾正它。根據他想要測試的邏輯理解問題後,由程序員來糾正這種情況。 – AhmadWabbi

0

嘗試使用括號來單獨邏輯「OR」和「」 因爲如果值爲null測試始終是真實的

if ((materialtype != "WINDOWVINYLREPL" || materialtype != "ROOFING") 
     && materialtype != null) 
    { 
     ..... 
    } 
相關問題