Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于日志记录的代表_C#_.net_Logging_Delegates_Refactoring - Fatal编程技术网

C# 用于日志记录的代表

C# 用于日志记录的代表,c#,.net,logging,delegates,refactoring,C#,.net,Logging,Delegates,Refactoring,如何重构这段代码 ulong get_item_action_id = log.LogAction(iteration_id, "GET_ITEM_SERVICE"); try { p = serv.GetItemById(get_item_action_id, ls.externalItem.item); } catch (Exception exc) { log.LogActionResult(get_item_action_id, false, exc); cont

如何重构这段代码

ulong get_item_action_id = log.LogAction(iteration_id, "GET_ITEM_SERVICE");
try
{
    p = serv.GetItemById(get_item_action_id, ls.externalItem.item);
}
catch (Exception exc)
{
    log.LogActionResult(get_item_action_id, false, exc);
    continue;
}
log.LogActionResult(get_item_action_id, true);
这里的情况是:

  • 获取操作和检索记录的操作id的日志尝试 (
    ulong get_item_action_id=log.LogAction(迭代_id,
    “获取项目服务”);
  • 正确操作(
    p=serv.GetItemById(get\u item\u action\u id,ls.externalItem.item);
  • 记录成功或失败结果(
    log.LogActionResult(获取项目操作id,false,exc);
    log.LogActionResult(获取项目操作id,true);

  • 所以,我想我可以用一些委托重写它,但是如何?

    在哪里以及为什么要使用委托?我想重新编码try{}catch block,因为我有很多这样的构造。作为委托重构,而不是作为静态/非静态方法重构,你会得到什么?我建议您首先作为一个方法进行重构,然后重构为一个委托。@ZevSpitz原因是我得到的不仅仅是一个serv.GetItemByid()方法,还有很多不同的方法。我将重构代码中的日志记录,将代码重构为成功或引发异常的方法,然后使用Decorator模式包装对该方法的调用,并进行适当的日志记录(如果成功,则记录日志;如果发生异常,则记录“错误”)。我看不到在
    log
    实例上使用委托的好处。