在没有抛出异常的情况下拉动对象时返回错误数据?

时间:2017-09-15 09:22:30

标签: c# error-handling

我有一个场景,我通常会检索一个对象,让我们称之为UserRights。 如果一切正常,则填充对象。 但如果出现问题,我想知道出了什么问题,为什么会出错。通常我会抛出异常,但由于各种原因我不能抛出异常。

我在考虑向返回的对象添加两个字段,ErrorCode(int)和ErrorReason(string)。 如果Errorcode == 0则一切正常并填充对象。但如果它不是0则出现问题,我需要查看ErrorReason以了解原因。

我能看到的最大问题是我必须更新每个对象及其调用以满足这些额外字段。

还有其他可能的方法可以更好地返回错误数据吗?

1 个答案:

答案 0 :(得分:0)

我不知道您的应用程序架构,因此很难确定,但您有一些选择;

选项1

定义基类,然后所有其他类都可以从此继承;

public class MyBase {
    public int ErrorCode { get; set; }
    public string ErrorMessage  { get; set; }

    public MyBase ()
    {
        ErrorCode = 0;
        ErrorMessage = null; // or "";
    }
}

然后,您将工作量限制为仅在需要更新时才会出现错误。

但您必须更新所有其他类以继承此内容。 (如果你有很多痛苦,那么你可以使用下面的选项2)

选项2

如果您只有几个地方可以返回结果,那么您可以在发送之前修改您的回复。

定义与上面相同的类,但为您的响应添加一个额外的属性。比如这个;

public object MyResponse { get; set; }

然后,当您返回结果时,请创建此类的实例。如果您有错误更新它们并将MyResponse保留为null。 否则,将您的正常响应对象放在MyResponse中并返回它。

选项3

定义与上面相同的类,但不从中继承。 更改您的响应,以便返回通用对象。

返回对象时,返回正确的对象,如果出现错误,则只返回Error对象。

然后你的接收函数需要确定返回的类的类型并处理它。

选项4

您可能会有单独的错误报告 当您有错误时,您只需一个参考号,并将错误记录在其他地方。

接收者获取此参考编号而不是结果,然后查看以确定实际错误是什么。