0

我正在從VB轉換代碼到C#的過程從一箇舊的系統,使用基礎類的Web窗體繼承類。我希望爲我們新的外聯網建立一個新的登錄系統,它的功能就像舊系統,我可能錯過了一個步驟,但這裏是我嘗試轉換的區塊。並非所有的代碼路徑在Active Directory檢查返回一個值

public bool CheckAD() 
    { 
     string fncADStatus = "Failure"; 
     string fncSuccess = "Success"; 
     string fncFailure = "Failure"; 
     fncADStatus = Convert.ToString(Session["SessionADStatus"]); 
     try 
     { 
      if (fncADStatus == fncSuccess) 
      { 
       return true; 
      } 
     } 
     catch 
     { 
      if (fncADStatus == fncFailure) 
      { 
       return false; 
      } 
      if (Session["SessionADStatus"] == null) 
      { 
       return false; 
      } 
     } 
    } 

我得到以下錯誤「不是所有的代碼路徑返回一個值」,但我不明白爲什麼。

+1

在你釣到的魚,你需要的IFS之外的回報,或者您需要一個else與回報。或者你可以把它放回捕獲物之外。你的方法必須返回一些東西,因爲它不是無效的,並且如果所有的代碼路徑都沒有結束,Visual Studio就不會讓它編譯。 –

+1

如果'fncADStatus!= fncSuccess'會怎麼樣?如果try中的if塊的計算結果爲false,則該方法不會返回任何內容。 –

回答

1

它給你的錯誤,因爲你沒有提到的其他statment;如果條件落在其他地方,什麼都不會返回。做以下不會給你錯誤。

public bool CheckAD() { 
     string fncADStatus = "Failure"; 
     string fncSuccess = "Success"; 
     string fncFailure = "Failure"; 
     fncADStatus = Convert.ToString(Session["SessionADStatus"]); 
     try 
     { 
      Boolean output = false; 
      if (fncADStatus == fncSuccess) 
      { 
       output = true; 
      } 
      return output; 
     } 
     catch 
     { 
      Boolean output = true; 
      if (fncADStatus == fncFailure) 
      { 
       output = false; 
      } 
      if (Session["SessionADStatus"] == null) 
      { 
       output = false; 
      } 
      return output; 
     } 
    } 
1

並非catch塊中的所有代碼路徑都會返回結果。通常情況下,你會寫這樣的事情

public bool CheckAD() 
{ 
    try {...} 
    catch 
    { 
     if (fncADStatus == fncFailure) 
     { 
      logger.Debug("One"); 
     } 
     if (Session["SessionADStatus"] == null) 
     { 
      logger.Debug("Two"); 
     } 

     return false; // <<<<< This bit is missing in your case 
    } 
} 
相關問題