我不想抛出异常,我应该返回一个包含bool和字符串数组的自定义类吗?

时间:2009-12-21 12:26:26

标签: c# exception-handling error-handling

您的代码中有一些区域您不希望程序执行停止,例如在ecomm商店结账时说。

我正在考虑创建一个特殊的“返回”类型,如下所示:

public bool SpecialReturn
{
    public bool IsSucess {get;set;}
    public List Messages {get;set;}
}

如果我愿意的话,我可以在那里放一个枚举来返回ReturnType等。

然后,我会调用我的CheckOut流程方法并返回它,这样我就可以更优雅地处理错误。

这是一个好习惯吗?

5 个答案:

答案 0 :(得分:3)

当您遇到异常时,程序执行不必停止。

一般情况下,我会建议在出现问题时抛出异常。如果您不希望该异常关闭该程序,那么请抓住它并优雅地处理它。

当然,总有一种情况是返回某种状态对象可能比抛出/捕获异常更好,而你的情况可能就是其中之一,但没有更多的信息就很难说。

答案 1 :(得分:2)

你来自C的精彩世界不是吗?

是的,你可以这样做。但它没有用...... 您的代码仍然可以从ClassLibrery中抛出 和处理错误代码,很糟糕...

抛出异常不会停止程序,它们只是告知上层出现意外错误...尝试......抓住......

你应该使用例外,但只有在特殊情况下...

答案 2 :(得分:1)

  

这是一个好习惯吗?

我会说不。

创建自己的Exception子类,根据需要添加自定义属性(报告与您的需求相关的上下文信息)并抛出。

如果您使用Visual Studio,则会有一个很好的代码片段,名为Exception。

[Serializable]
public class MyCustomException : Exception
{
    public MyCustomException(string myMessage)
    {
        MyMessage = myMessage;
    }

    protected MyCustomException(SerializationInfo info, StreamingContext context)
        : base(info, context)
    {
    }

    public string MyMessage { get; private set; }
}

//...

throw new MyCustomException("Hello, world!");

答案 3 :(得分:1)

如果函数可以成功并返回结果,或者失败并且不返回结果,则可以使用Microsoft在许多位置执行的相同模式。 TryParse就是一个很好的例子。

int result;
if ( Int32.TryParse("MyStringMayFail", out result) )
{
 // Succeeded result is usable
}
else
{
 // failed result is undefined and should not be trusted.
}

方法的实际返回类型表示成功或失败,参数化输出变量保存函数可能执行的任何操作的“结果”。这种编码方式使函数的最终用户能够直接对函数的成功或失败进行编码。

创建自己的TryParse方法实现很容易,它们通常与Parse方法结合使用,如果在处理过程中出现问题,则抛出异常。

答案 4 :(得分:0)

如果它实际上是一个“例外”案例,而不仅仅是有效的失败,那么抛出异常是完全合理的。在您的情况下,您可以处理异常,并尽可能继续执行。

最后你提出的建议就是重新创建已经完成的异常处理。

现在,如果失败是由于信用卡授权失败(意味着卡号无效,连接失败需要例外)或类似的事情。我会使用失败代码和错误消息而不是异常。