提升返回值错误报告给例外

时间:2012-04-20 14:26:09

标签: c# error-handling

在框架设计指南手册中有一章关于异常,他们讨论基于返回值的错误报告和基于异常的错误报告,以及我们在像C#这样的OO语言中我们应该避免基于返回值的错误报告和使用例外。考虑到这一点,我正在查看八年前用Visual Basic编写的代码,去年使用自动工具转换为C#!

所以这是我正在研究的方法,我想知道这本书的建议是否适用于这样的方法,如果是的话,那么重写这种方法会有什么更好的方法呢?

public int Update(CaseStep oCaseStepIn)
{
    int result = 0;
    //Update the master object with the passed in object

    result = UCommonIndep.gnUPDATE_FAILED;
    if (Validate(oCaseStepIn) == UCommonIndep.gnVALIDATE_FAILED)
    {
        return result;
    }

    CaseStep oCaseStep = get_ItemByObjectKey(oCaseStepIn.CopyOfObjectKey);
    if (oCaseStep == null)
    {
        return result;
    }   

    return result;
}

2 个答案:

答案 0 :(得分:1)

尽可能抛出特定的例外情况。然后,在这种情况下不需要返回值

public void Update(CaseStep oCaseStepIn)
{
    //Update the master object with the passed in object
    if (Validate(oCaseStepIn) == UCommonIndep.gnVALIDATE_FAILED)
        throw new ValidationFailedUpdateException();

    CaseStep oCaseStep = get_ItemByObjectKey(oCaseStepIn.CopyOfObjectKey);
    if (oCaseStep == null)
        throw new KeyObjectNotFoundUpdateException();

    if (oCaseStep.Update(oCaseStepIn) != UCommonIndep.gnUPDATE_SUCCESSFUL)
        throw new UpdateFailedException();

    //*******************************
    //FYI - Insert code here to update any Key values that might have changed.
}
  • UpdateFailedException扩展异常
  • ValidationFailedUpdateException扩展UpdateFailedException
  • KeyObjectNotFoundUpdateException扩展UpdateFailedException

答案 1 :(得分:0)

对于异常处理存在(至少)与编码员一样多的意见,但从一开始就有一个好的经验法则是在特殊情况下应该抛出异常。

那么,更新失败是否异常?