使用表达式树工厂方法表示没有异常变量或过滤器的 try..catch

Represent try..catch without exception variable or filter using expression tree factory methods

我应该调用 System.Linq.Expressions.Expression 中的哪个工厂方法来创建表达式树——更具体地说,一个 CatchBlock 实例——它代表以下 C# 代码中的 catch

try {
    // ...
} catch {
    // ...
}

All the overloads of the Catch method 似乎需要一个异常类型——相当于这个:

catch (Exception) {
    // ...
}

and/or 将绑定到异常的 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) {...} 分开处理,因为它们都将捕获所有异常。