在表达式树中检查了类型转换?

时间:2011-06-27 07:33:11

标签: c# expression-trees

我正在使用Expression创建一些动态生成的代码。我的解决方案有效,除了一个功能:我想做一个检查类型转换,如果转换失败,则抛出TypeCastException。

我找到了Expression.TypeAs(),它进行了类型转换,但是当转换失败时它返回null而不是throw。

有一种简单的方法可以在Expression中执行检查类型转换吗?或者我是否必须检查null并自己抛出异常?

这就是我所拥有的: -

ParameterExpression typedAttribute = Expression.Variable(attributeType, "typedAttribute");
ParameterExpression typedValue = Expression.Variable(valueType, "typedValue");

BlockExpression methodBlock = Expression.Block(new[] { typedAttribute, typedValue }, new Expression[]
   {
       Expression.Assign(typedAttribute, Expression.TypeAs(attribute, attributeType)),
       Expression.Assign(typedValue, Expression.TypeAs(value, valueType)),
       Expression.Call(visitor, methodInfo, typedAttribute, typedValue),
       Expression.Assign(visited, Expression.Constant(true)),
   });

1 个答案:

答案 0 :(得分:14)

Expression.Convert应该在这里扮演角色。