c# - 在方法开始和结束时进行错误处理的优缺点是什么

标签 c# error-handling paradigms

根据我的程序员经验,我混合使用了所有可能的错误处理方式……我创造了我的个人风格。

但是,我想听听您认为错误处理在方法开始与结束时的优缺点

开头的处理:

public String GenerateSomeStringData(String data, int value)
{
    if (data == null)
        throw new ArgumentNullException("data");

    if (value <= 0)
        throw new ArgumentException("value must be greater than zero");

    int dataValue;
    if (!int.TryParse(data, out dataValue))
        throw new InvalidOperationException("data does not contain an integer");

    return dataValue * 4 + value / 12;
}

末尾处理:(同例)

public String GenerateSomeStringData(String data, int value)
{
    if (data != null)
    {
        if (value > 0) 
        {
            int dataValue;
            if (int.TryParse(data, out dataValue))
            {
                return dataValue * 4 + value / 12;
            }
            else 
                throw new InvalidOperationException("data does not contain an integer");
        }
        else 
            throw new ArgumentException("value must be greater than zero");
    }
    else 
        throw new ArgumentNullException("data");
}

在决定如何处理这个问题时,您使用什么标准?可读性、可维护性、简洁性?

最佳答案

输入的有效性应该是 precondition执行该方法 - 因此,我会(并且会)始终首先进行错误处理。

这样做有以下优点:

  • 人类更容易解析: 首先验证先决条件,然后 执行逻辑(通常 结果在一些后置条件下)

  • 明确分离关注点 错误处理和执行逻辑
    在您的方法中:验证逻辑未“散布”在执行逻辑中

如评论中所述,您必须区分违反前提条件并触发错误条件(例如抛出异常)的无效输入和构成边缘条件的有效输入(即需要一些要处理的特殊逻辑)。后一种情况我会在断言前提条件后,在您的方法的执行逻辑开始时单独处理。

关于c# - 在方法开始和结束时进行错误处理的优缺点是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6600355/

相关文章:

go - 使用统一建模语言图编程 Go

c# - 更改 Web Api 2 Post 方法以接受修改后的正文

python-3.x - 错误处理函数的有效方法

paradigms - 哪种编程语言范式适合哪种工作?

ruby-on-rails - Rails 4处理语言环境错误页面

windows - 在Go中调用Windows API时如何获取Windows系统错误代码

javascript - 如何将紧密耦合的代码提取到外部库中?

c# - "The process cannot access the file because it is being used by another process"

c# - 属性转换器的自定义错误消息

c# - 如何在事务上设置挂起的回滚?