当异常处理所有其他代码路径时,在方法错误做法结束时'返回true'吗?

时间:2011-08-26 17:18:37

标签: c# exception-handling

我正在尝试调用保存用户信息的Web服务。实质上,返回一个'completion'对象,其中包含服务调用的结果。我的代码可以压缩如下:

public bool SaveUserInformation(ArgsList args) {
    CompletionObject results = SaveService(args);
    if (results.Status == Failed)
        throw SomeException("onoez D:");

    return true;
}

本质上,此方法返回一个布尔值,但该值永远不会为false。这对我来说有点奇怪,那么有更好的方法来解决这个问题吗?

谢谢!

5 个答案:

答案 0 :(得分:6)

为什么不返回void?如果抛出异常,那么你就会知道它。如果没有抛出,则表示您的函数已成功完成(返回true)。

try
{
   MyFunction();
   //here you know it has successfully completed
}
catch(Exception e)
{
   //...  
}

但是,如果你要覆盖一个返回bool的虚函数,那么你当然总能返回true,因为你必须返回一些布尔值。想想看,你也可以回复假:)

答案 1 :(得分:1)

Exception适用于特殊情况。

Return value用于指示调用者在被调用函数内发生的事情。

它们是完全不同的设计概念。

想要你想要的那个方法的行为是什么样的。

如果没有要通知的内容,请删除返回值。

如果有,请检查是否真的有意识处理所有异常处理。

答案 2 :(得分:1)

根据这个问题,在查看代码后,我会说

无论结果如何,此函数都返回true,因此其返回值没有意义。

另一方面,如果您曾尝试打开不存在的文件,那么您也会遇到异常。如果您处理了Exception并使用了默认文件或加载了默认值并且所有内容仍然有用......那么返回true将是合乎逻辑的。

你所展示的功能对使用它的人没有帮助......除非你遗漏了它。

答案 3 :(得分:0)

为什么甚至让它返回一个布尔值?您要么将错误作为true / false值返回,要么只返回任何内容并依赖异常。

答案 4 :(得分:0)

为什么不简单地返回CompletionObject

public CompletionObject SaveUserInformation(ArgsList args) {
    return SaveService(args);
    /*if (results.Status == Failed)
        throw SomeException("onoez D:");

    return true;*/
}

我无法理解bool返回值的必要性,因为它总是如此。