我目前正在处理我的异常:
try {
}
catch (ServiceException ex) {
ModelState.Merge(ex.Errors);
}
catch (Exception e) {
Trace.Write(e);
ModelState.AddModelError("", "Database access error: " + e.Message);
}
Run Code Online (Sandbox Code Playgroud)
这有效但是我重复了很多次的相同代码.我正在寻找的是关于如何将其转换为外部函数的一些建议.我不一定需要在那里移动try块,但至少需要移动其他代码.
也许是一个传递了Exception和ModelState的函数(作为参考).任何人都可以建议一个干净的方式,我可以编写这个功能.我在这里问,因为几乎总有人似乎想出了一个我从未想过的解决方案.谢谢萨曼莎.
你可以创建一个接受Action的方法,并在try/catch块中调用它:
private void RunAndHandleExceptions(Action action)
{
try
{
action.Invoke();
}
catch (ServiceException ex)
{
ModelState.Merge(ex.Errors);
}
catch (Exception e)
{
Trace.Write(e);
ModelState.AddModelError("", "Database access error: " + e.Message);
}
}
Run Code Online (Sandbox Code Playgroud)
并称之为:
RunAndHandleExceptions(new Action(() =>
{
//Do some computing
}));
Run Code Online (Sandbox Code Playgroud)
编辑:带参数(例如,可以在控制台程序中运行):
private static void ParameterizedTask()
{
Task.Factory.StartNew(new Action<object>((y) =>
{
Console.WriteLine(y);
}), 5);
Thread.Sleep(1500);
}
//OUTPUT: 5
Run Code Online (Sandbox Code Playgroud)
有关详细信息,您可以查看此主题.