I am usi开发者_StackOverflow社区ng 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)),
});
Expression.Convert
should act as a cast here.
精彩评论