C#,捕获异常

5
我使用时遇到了异常类型。
catch(Exception e){
  log.Error(e.GetType()); // it write 'System.Data.EntityException'
}

因此,我修改了代码以捕获该异常,

try{
...
}catch(EntityException a){
  // need to do something
  log.Error("I got it!");
}catch(Exception e){
  log.Error("No");
}

代码只写了“No”,如何在发生异常前捕获EntityException?

谢谢。


2
你确定没有其他的EntityException吗?尝试直接使用throw new System.Data.EntityException();,看看是否被捕获。 - Alexei Levenkov
2
尝试在第二个catch块中获取异常的类型,它仍然是EntityException吗? - Tejas Sharma
你的代码片段必须是可行的。请提供更多信息,或将完整的类型名称与“No”字符串放在一起… - gustavodidomenico
2
或者,您可以尝试使用catch(System.Data.EntityException a) - Kobi
将异常类型附加到您的控制字符串末尾:"I got it! " + a.GetType().ToString()e.GetType().ToString()... 以验证当最底层的 catch 被调用时,确实获得了您所认为的内容。 - Sam Axe
“EntityException”是“System.Data.EntityException”吗? - Jodrell
3个回答

4

只要在文件或命名空间的当前使用语句集中没有定义另一个EntityException类型,那么你拥有的代码应该可以正常工作。

尝试完全限定类型,如下所示:

try{
...
}catch(System.Data.EntityException a){
  // need to do something
  log.Error("I got it!");
}catch(Exception e){
  log.Error("No");
}

1
我遇到了相同的问题,这里被接受的答案对我没有用。虽然 EntityException 被完全限定为 System.Data.EntityException,但它实际上位于 System.Data.Entity 程序集中(请参见 http://msdn.microsoft.com/en-us/library/system.data.entityexception(v=vs.110).aspx),因此项目需要引用 System.Data.Entity 才能使 Intellisense 在代码中识别 System.Data.EntityException。

(+1) System.Data.EntityException 对我也没用。这个问题回答了同样的问题: Handle exceptions in entity framework 4 - Vinz

-1

匹配异常的第一个“catch”是被激活的。


-1 - 这正是 OP 所要求的 - 在那种特定情况下,它应该这样做,但显然并没有。 - Alexei Levenkov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接