C#中的错误处理

时间:2015-07-27 07:52:20

标签: c# mvvm error-handling

因为我正在编写我的第一个MVVM应用程序,而且我从来没有这样写过" big"应用。我不知道如何正常完成用户的错误处理。

我找到了一些"指南": http://codebuild.blogspot.co.at/2012/01/15-best-practices-about-exception.html

首先提到:"不要管理具有例外的业务逻辑。改为使用条件语句。如果可以使用if-else语句清楚地完成控件,则不要使用异常,因为它会降低可读性和性能(例如,空值控制,除以零控制)。"

那么最好使用if-else语句?或者你好吗?或者最好只使用try-catch语句?

后来当我有更多的if-else代码声明时,其他...更好地使用基本错误bool和错误字符串来代码?刚发生这种情况时,只需将此bool转换为true状态并将消息写入错误字符串?然后通过显示结果检查是否发生任何错误?

如果您不明白这个问题,请询问,或者说如何处理用户代码中的错误?

欢迎任何一般指南:)

2 个答案:

答案 0 :(得分:1)

如上所述,异常会降低性能(不确定可读性,我个人从未遇到过问题)。如果您比较使用 IF 语句或使用 TRY-CATCH 检查某些内容所需的时间,您会发现第一个支持的巨大差异。

我会说在任何地方使用 IF 语句,您可以自己检查有效性 - 如果失败,在else语句中您可以指定需要完成的操作(向用户显示消息等)。例如,当划分x / y

    private static void IfMethod()
    {
        int x = 10;
        int y = 0;

        if (y != 0)
        {
            Console.WriteLine(x / y);
        }
        else
        {
            Console.WriteLine("y is 0");
        }
    }

Try-catch 更适用于无法预测所有内容的情况。例如,如果您尝试读取/写入文件,则永远不会100%知道您是否可以访问该特定文件,文件系统或文件实际存在。如果您正在为其他人编写应用程序,则尤其如此。您无法知道他们如何配置他们的PC,访问权限等。

希望这有帮助。

答案 1 :(得分:1)

  

不要用例外来管理业务逻辑。使用条件   而是声明。如果可以使用if-else语句完成控件   显然,不要使用例外,因为它会降低可读性   性能

真。但是,让我们澄清,这里的含义是什么 这是一个示例,当逻辑构建在异常上时:

private int? Foo(int a)
{
    try
    {
        // bar is some int field
        return bar / a;
    }
    catch (DivideByZeroException)
    {
        return null;
    }    
}

此处,方法Foo 需要a可以为0.因此,a == 0不是例外。但是,而不是这个:

private int? Foo(int a)
{
    if (a == 0)
        return null;

    return bar / a;
}

此方法的逻辑使用异常来检测,该方法的结果未确定,并返回特殊值(null)。

另一方面,这是一个例子,当你必须使用例外时:

public int Foo(int a)
{
    if (a == 0)
        throw new ArgumentOutOfRangeException("a can't be 0!");

    return bar / a;
}

此版本的Foo是类库中的公共方法。在Foo时,a == 0的逻辑无法处理此案例。因此,它必须检查输入参数,并抛出异常。

重新引用上面的引文:

  • 如果您的业务逻辑可以(并且必须)处理当前状态,则不抛出异常;改为使用条件语句。
  • 如果当前状态是意外的,则抛出异常,并且不能(不得)由业务逻辑处理。