gpt4 book ai didi

c# - 使用一个消息类静态方法采取一个 Action 来包装 Try/Catch

转载 作者:行者123 更新时间:2023-11-30 22:46:33 25 4
gpt4 key购买 nike

我有一个 Result 对象,可以让我传递一个事件消息列表,我可以检查操作是否成功。

我意识到我在很多地方都写了这段代码

Result result;

try
{
//Do Something
...

//New result is automatically a success for not having any errors in it
result = new Result();
}
catch (Exception exception)
{
//Extension method that returns a Result from the exception
result = exception.ToResult();
}

if(result.Success) ....

我正在考虑将此用法替换为

public static Result CatchException(Action action)
{
try
{
action();
return new Result();
}
catch (Exception exception)
{
return exception.ToResult();
}
}

然后像这样使用它

var result = Result.CatchException(() => _model.Save(something));

有没有人觉得这有什么问题,或者我是在用可重用性换取晦涩难懂?

编辑: 我捕获所有异常的原因是我在与模型交互的任何时候都在我的 ViewPresenter 类中使用此代码,因为如果我遇到未处理的异常,我宁愿显示给用户(内部应用程序)的实际错误,而不是仅仅将他们重定向到一般错误页面。

最佳答案

我认为使用函数式方法并传入 lambda 没有任何问题。这是完全正确的。

话虽这么说,但我会质疑您在这种特定情况下的使用。将所有异常捕获到通用“结果”类中似乎很危险。理想情况下,您应该捕获可以正确处理的异常 - 而不是每一个可能的异常并继续。

话虽这么说,如果你真的想这样做,我有几个建议给你:

1) 我会为成功创建一个静态的、不可变的结果,然后:

result = result.Success;

这避免了每次成功都会产生新的“成功”,希望这是最常见的选择。

2) 我可能会避免使用扩展方法,并执行以下操作:

result = new Result(exception);

这在意图上会更加清晰和明显,在这种情况下真的没有理由做扩展方法......

关于c# - 使用一个消息类静态方法采取一个 Action 来包装 Try/Catch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2596219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com