吞咽异常时如何返回值?

B. *_*non 2 c# exception-handling exception

我在我的数据类中使用了以下模式的catch块:

} catch (OracleException e) {
    log.Error(e, e);
    ExceptionNotification.Show(e, "Platypus data not found for Platypus");
    throw;
}
Run Code Online (Sandbox Code Playgroud)

("log"是log4net;之后是我们花哨的异常显示对话框).

当我删除"throw"时,我得到"并非所有代码路径都返回值"

如果我到达异常块,我想要返回的对象(一个OracleDataTable,一个List,一个Dictionary <>或一个自定义类,通常可能是null,或者最好不会感觉太好.我可以返回到mollify编译器?

Eri*_* J. 5

声明返回类型的方法的每个代码路径都必须返回一个值或抛出异常.

如果您不想抛出,则必须返回适当的值

} catch (OracleException e) {
    log.Error(e, e);
    ExceptionNotification.Show(e, "Platypus data not found for Platypus");
    return SomeMeaningfulReturnValue;
}
Run Code Online (Sandbox Code Playgroud)

但是,除非你可以返回的值实际上对调用者有意义(而不是说返回null并且发明代码契约"null意味着存在问题)",我会坚持使用异常时抛出异常的约定错误.