gpt4 book ai didi

c# - 可重复使用的 Try/Catch block

转载 作者:太空宇宙 更新时间:2023-11-03 20:02:25 24 4
gpt4 key购买 nike

我编写了以下方法,认为它可以让我传递一个方法调用以包装在 try catch 中。我试图避免在整个应用程序中放置相同的 try/catch 样板代码。我已经接到了 20 多个电话,到我们完成时会有数百个电话。

protected T CallRepository<T>(T repositoryMethod)
{
try
{
return repositoryMethod;
}
catch (Exception ex)
{
logger.Error(ex);
throw new DatabaseException();
}
}

调用方法如下:

var results = CallRepository<VisitLogDTO>(visitLogRepository.AddVisit(visitLogDTO));

起初我没有意识到这没有按预期工作。发生的事情是结果被包装在 try/catch 中,而不是对方法的调用。如果我收到数据库错误或来自 visitLogRepository 的任何错误,那么我是原始错误而不是新的 DatabaseExeception。

如有任何帮助,我们将不胜感激。

最佳答案

您需要传入一个 Func<T> , 不是 T :

protected T CallRepository<T>(Func<T> repositoryMethod)
{
try
{
return repositoryMethod();
}
catch (Exception ex)
{
logger.Error(ex);
throw;
}
}

并像这样使用它:

var results = CallRepository(() => visitLogRepository.AddVisit(visitLogDTO));

关于c# - 可重复使用的 Try/Catch block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26530214/

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