Я использую 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)),
});