C# 解释失败原因的最佳方法

C# 解释失败原因的最佳方法,c#,C#,假设我在一个对象中有以下方法: public class foo { public bool DoSomethingAwesome() { bool bar = DidSomething() //suppose this sends an email; return bar; } } 如果我想提供更多关于为什么DidSomething返回false的详细信息,那么最佳做法是将消息分配给foo的属性,还是将Out参数分配给DoSometh

假设我在一个对象中有以下方法:

public class foo
{
    public bool DoSomethingAwesome()
    {
        bool bar = DidSomething() //suppose this sends an email;
        return bar;
    }

}

如果我想提供更多关于为什么DidSomething返回false的详细信息,那么最佳做法是将消息分配给foo的属性,还是将Out参数分配给DoSomethingAwesome?

我认为这在很大程度上取决于您使用的框架(即,这是一种约定)

  • 对于Win32-您有SetLastError, GetLastError
  • 对于.NET来说,它通常是 正在抛出异常,但可能是 改变以适应你的环境
也许可以找个外行


如果您决定使用异常路由,MSDN将有一个带有“”的条目。在《第七章》一书中有一个很好的讨论,我极力推荐

这在很大程度上取决于你在做什么,但在发送电子邮件的情况下,我会根据出错的地方抛出不同的异常。由于发送电子邮件应该几乎每次都能正常工作,所以当有不好的事情发生时,我希望强制打电话的人处理它,而不是默认情况下忽略它


在其他情况下,如果失败的几率很高,则可以忽略失败,或者
false
不一定意味着失败,我会创建一个
enum
,其中为每种类型的失败指定一个值,为成功指定一个值,并返回该值,而不是
bool

查看我的答案:


可能会有帮助。

如果false条件不是“异常”(不是很少发生,而是均匀发生),那么您不应该使用异常。在这种情况下,使用out参数要好得多

如果都是.NET,抛出异常是正确的方法。我倾向于同意,尤其是在这种情况下,因为您正在执行的操作可能不在性能关键例程中。异常并不总是正确的解决方案,但只有在高性能代码中才会出现这种情况,因为抛出/捕获异常的速度往往很慢。我认为这个问题有点误导性,这更多的是关于在错误情况下应该做什么(我投以抛出异常的票)。