c# - 尝试捕捉错误的形式?

标签 c# asp.net exception

我想我有点知道这个问题的答案,但总是有很多方法可以做事(其中一些显然是错误的:))...

我有一个小的递归函数来查找员工经理的 ID。这是在导入脚本中使用的,可能是直属经理已经离开(被禁用),因此我们需要找到员工(经理)经理(等等),以便我们可以为他们分配东西。如果不明显,EmployeesToDisable 是在此导入中标记为禁用的员工的通用列表。

我想我真正想问的是:在这种情况下,与捕获异常相关的开销是否需要过多的权衡。我应该以不同的方式做这件事吗? 这确实工作正常,但感觉它是一种糟糕的形式..

我有这样的代码:

private Guid getMyEnabledManagersID(OnlineEmployee e)
    {
     Employee manager;
     try
     {
      //see if Employee e's manager is in the disabled list.
      manager = (from emp in EmployeesToDisable where emp.EmployeeID.Equals(e.ManagerID) select emp).Single();
      //yes they are, so need to call this again 
      return getMyEnabledManagersID(manager);
     }
     catch
     {
      return e.ManagerID;
     }
    }

最佳答案

撇开递归不谈,您也许应该只使用 SingleOrDefault 并测试 null。实际上,您可能不需要完整的员工对象 - 您可能只需返回 id(整个)就足够了,即

private Guid getMyEnabledManagersID(Guid managerId)
{
    var disabled = (from emp in EmployeesToDisable 
                    where emp.EmployeeID == managerId
                    select (Guid?)emp.ManagerID).SingleOrDefault();
    return disabled == null ? managerId : getMyEnabledManagersID(disabled.Value);
}

实际上,我对原始形式的最大担心是它不特定于异常的类型;它可能是“线程中止”、“僵尸连接”、“死锁”等。

关于c# - 尝试捕捉错误的形式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3802658/

相关文章:

c# - 错误无法将类型为“System.Int32”的对象转换为类型为“System.String”的对象

c# - 如何在回发的文字控件中保留用户输入?

asp.net - 在 asp.net 中显示页面加载时的引导模式

c++ - 我可以扔流吗?

javascript - 捕获 iframe 异常

c# - 从 MVC 放置/发布后如何获得 JSON 响应

c# - 使用 CefSharp 显示本地 PDF 文件

c# - 使用 Linq 表达式中的键创建 TreeNode

ios - 忽略 com.apple.coremedia.networkbuffering 中的异常

c# - 在 MVC 中发布多个对象列表