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

问题描述 投票:0回答:1

我应该调用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具有相同的行为

c# .net expression-trees
1个回答
1
投票

使用try {...} catch {...}来捕获从非.Net组件抛出的异常并因此不从System.Exception继承是错误的,因为CLR自动用RuntimeWrappedException包装这样的异常显然继承System.Exception - 因此你可以使用try {...} catch(Exception e) {...}来捕获例外情况好。

因此,没有必要与try {...} catch {...}分开处理普通的try {...} catch (Exception e) {...},因为它们都会捕获所有异常。

© www.soinside.com 2019 - 2024. All rights reserved.