如何创建一个通用的try catch重复代码?

问题描述 投票:0回答:1

在C#中,我的所有代码几乎都是这样的,SomeMethod是唯一不同的地方,但所有的请求模型都继承了一些父模型。

try
{
   response = SomeMethod(requestModel);
}
catch (Exception ex)
{
  this.logger.Log(ex.MoreDetails());
  response = this.BadRequest();
}

SomeMethod是唯一不同的东西,但所有的请求模型都继承了一些父模型.有什么技巧可以让我不必在所有的代码上重复这样的代码吗?响应也使用相同的通用模型。

c# generics try-catch
1个回答
2
投票

你可以创建一个方法来接受 Func 作为参数。

class Request{} 
class BadRequest:Request{}
class AnotherRequest:Request{}

static Request HandleException(Func<Request> f)
{
    Request result ;
    try
    {
        result = f();
    }
    catch (Exception ex)
    {
        result = new BadRequest();
    }
    return result;
}

static AnotherRequest SomeMethod(int i) => new AnotherRequest();  

和用法:

Request result = HandleException(() => SomeMethod(1));
© www.soinside.com 2019 - 2024. All rights reserved.