return
将退出该方法;也throw
将退出该方法,假设它不在. 只能退出一次!try
所以不管顺序如何——第一个 throw
/return
有效结束方法。
不过,作为更一般的反馈:如果意图是在失败时返回 false,那么您只需要:
try
{
session.Save(obj);
return true;
}
catch
{
return false;
}
就个人而言,我会说这是一个糟糕的代码——它对调用者隐藏了实际问题,使得调试变得非常困难。它没有告诉我们失败的原因。我想说更好的方法就是让异常冒泡。在这种情况下,没有必要返回true
,因为我们永远不会返回false
- 捕获异常只是为了重新抛出它是没有意义的。于是整个方法就变成了:
session.Save(obj);
(没有其他要求)
如果您的问题是“为什么只有其中一个会产生警告”:这是一个公平的问题,但编译器不需要为您发现其中任何一个。也许它应该发现它。我怀疑这gmcs
会发现并警告它——mono 中的编译器更愿意指出愚蠢。
编辑:正如预期的那样,[g]mcs 输出:
Program.cs(15,13):警告 CS0162:检测到无法访问的代码
Program.cs(28,13):警告 CS0162:检测到无法访问的代码
对于下面的代码 - 所以它确实将两种用途都报告为警告:
class Program
{
static void Main() { }
static void DoSomething() { }
bool ReturnFirst()
{
try
{
DoSomething();
return true;
}
catch
{
return false;
throw; // line 15
}
}
bool ThrowFirst()
{
try
{
DoSomething();
return true;
}
catch
{
throw;
return false; // line 28
}
}
}