表达式树中的选中类型强制转换

本文关键字:类型 转换 表达式 | 更新日期: 2023-09-27 18:00:23

我使用Expression来创建一些动态生成的代码。我的解决方案是有效的,除了一个特性:我想进行检查类型转换,如果转换失败,就会抛出TypeCastException。

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

有没有一种简单的方法可以在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)),
   });

表达式树中的选中类型强制转换

Expression.Convert应在此处充当强制转换。