2011-05-31 33 views
0

我在C#4.0就是這樣的方法:C#重寫一個方法並可選地拋出一個異常,是否需要返回值?

protected override bool _update() 
    { 
     if (this.Notes == "") 
      throw new Exception("Some message..."); 
     else 
      base._update(); 
    } 

編譯器會抱怨,並非所有的代碼路徑返回一個值,但是,如果我這樣做:

protected override bool _update() 
    { 
     throw new Exception("Some message..."); 
    } 

它編譯好吧。有沒有建議解決這個問題的方法?看起來他們真的沒有什麼不同,如果在一個案例中的例外足夠沒有返回值,爲什麼不在另一個案例中呢?

回答

4

這給了一槍:)

protected override bool _update() 
    { 
     if (this.Notes == "") 
      throw new Exception("Some message..."); 
     else 
      return base._update(); 
    } 

你只需要返回base._update()的輸出,這是不夠的,只要運行它,因爲該值將不會被退還。

+0

我是這樣的doofus!感謝您指出了這一點。我假設自base._update()已經返回一個布爾,我很好,但仍忘記了'返回'。 – kd7iwp 2011-05-31 20:32:53

0

因爲如果this.Notes != "",那麼你的方法會退出,而不會返回一個值。你的意思是?

protected override bool _update() 
{ 
    if (this.Notes == "") 
     throw new Exception("Some message..."); 
    else 
     return base._update(); 
} 
1

該方法期望布爾類型的返回值,但您在這裏沒有返回任何東西。無論如何,「例外」情況都將退出功能。你需要做的是這樣的:

如果(..).. 其他 { 回報 base._update(); }

0

這是因爲你沒有做 「迴歸base._update」 也請堅持標準的命名約定的建議:)

由包括

 
     protected override bool Update() 
     { 
      if (this.Notes == "") 
      { 
       throw new Exception("Some message..."); 
      } 
      else 
      { 
       return base.Update(); 
      } 
     } 
晃來晃去,如果語句的問題走就走
相關問題