我可以将我的异常代码移动到处理函数.所以我不必重复相同的代码

Sam*_*tar 5 c#

我目前正在处理我的异常:

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的函数(作为参考).任何人都可以建议一个干净的方式,我可以编写这个功能.我在这里问,因为几乎总有人似乎想出了一个我从未想过的解决方案.谢谢萨曼莎.

Lou*_*ann 5

你可以创建一个接受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)

有关详细信息,您可以查看主题.