我应该调用System.Linq.Expressions.Expression
中的哪个工厂方法来创建表达式树 - 更具体地说,是CatchBlock
实例 - 它代表以下C#代码中的catch
:
try {
// ...
} catch {
// ...
}
All the overloads of the Catch method似乎需要一个异常类型 - 相当于:
catch (Exception) {
// ...
}
和/或将被绑定到例外的ParameterExpression
- 相当于:
catch (Exception ex) {
// ...
}
将null
传递给第一个参数(并投射到Type
以避免歧义):
// using static System.Linq.Expressions.Expression
Catch((Type)null, Constant(true));
导致ArgumentNullException。
MakeCatchBlock method具有相同的行为
使用try {...} catch {...}
来捕获从非.Net组件抛出的异常并因此不从System.Exception
继承是错误的,因为CLR自动用RuntimeWrappedException
包装这样的异常显然继承System.Exception
- 因此你可以使用try {...} catch(Exception e) {...}
来捕获例外情况好。
因此,没有必要与try {...} catch {...}
分开处理普通的try {...} catch (Exception e) {...}
,因为它们都会捕获所有异常。