2015-05-22 13 views
1

我有這樣的代碼片段在這裏:如果else的其中一個布爾參數爲空,爲什麼else語句不會被執行?

public void ReDrawParallelLines(string lineName, string viewType) 
    { 
     var referenceLineOne = GetLineParams(viewType + ReferenceEnum.One.ToString() + linename); 
     var referenceLineTwo = GetLineParams(viewType + ReferenceEnum.Two.ToString() + linename); 

     if (lineName == referenceLineOne.lineParams.lineName) 
     { 

      //Do certain action with referencelineone 
     } 
     else if (lineName == referenceLineTwo.lineParams.lineName) 
     { 
      //Do same action but with referencelinetwo 

     } 
    } 

我注意到,如果referenceLineOne爲空,但我有referenceLineTwo,else語句永遠不會被執行。我不知道爲什麼?它不工作,如果布爾失敗,如果繼續其他,它應該通過其他。它只是跳過內部if語句和其他條件,因爲referenceLineOne爲null。爲什麼以及如何糾正此檢查?

基本上,我傳遞一個線路名稱,我想檢查它是否等於我從GetLineParams函數獲得的兩條線之一。

+1

如果'referenceLineOne'是'null',那麼你的'if'語句中的代碼將要拋出一個'NullReferenceException'。你有沒有一個空的catch語句在某個地方只是在吃它? –

+0

hmm好吧,referenceLineOne將爲null的唯一原因是如果該線尚未繪製,但我首先繪製referenceLineTwo。我想我需要一個更好的方法來檢查lineName我傳遞是否等於一個特定的lineName,以便我可以運行適當的條件。 –

回答

2

由於referenceLineOne爲空,您將得到一個異常,這就是爲什麼它繞過其他if和跳轉到其他地方的原因。

如果使用C#,您應該做的空檢查這樣

if (referenceLineOne != null && lineName == referenceLineOne.lineParams.lineName) 
{ 
    //Do certain action with referencelineone 
} 

或這6

if (lineName == referenceLineOne?.lineParams.lineName) 
{ 
    //Do certain action with referencelineone 
} 
+0

啊gotcha。謝謝。 –

+0

請注意,如果'lineName'和'referenceLineOne'都爲'null',那麼這兩個代碼片段的行爲會非常不同。 –

+0

@BenVoigt和'lineName'我假定你的意思是'=='左邊的一個' – ohmusama