Sto usando Expression per creare un po 'di codice generato dinamicamente. La mia soluzione funziona, ad eccezione di una funzione: Voglio eseguire un cast di tipo controllato, in cui TypeCastException viene generato se il cast non riesce.
Ho trovato Expression.TypeAs (), che esegue la conversione del tipo, ma restituisce null, piuttosto che il lancio, quando il cast fallisce.
C'è un modo semplice per fare un cast di tipo controllato in Expression? O devo verificare nulla e lanciare l'eccezione da solo?
Ecco cosa ho: -
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)),
});