2011-05-31 76 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(); 
      } 
     } 
晃来晃去,如果语句的问题走就走
相关问题