Checked type-cast in an Expression Tree?

允我心安 提交于 2019-12-12 10:35:35

问题


I am using Expression to create a little bit of dynamically-generated code. My solution works, except for one feature: I want to do a checked type-cast, where TypeCastException is thrown if the cast fails.

I have found Expression.TypeAs(), which does the type conversion, but it returns null, rather than throwing, when the cast fails.

Is there a simple way to do a checked type-cast in Expression? Or do I have to check for null and throw the exception myself?

Here's what I have: -

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:


Expression.Convert should act as a cast here.



来源:https://stackoverflow.com/questions/6489845/checked-type-cast-in-an-expression-tree

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!