Проверено ли приведение типов в дереве выражений? - PullRequest
11 голосов
/ 27 июня 2011

Я использую Expression для создания небольшого количества динамически генерируемого кода. Мое решение работает, за исключением одной функции: я хочу сделать проверенное приведение типов, при котором выдается исключение TypeCastException в случае сбоя приведения.

Я нашел Expression.TypeAs (), который выполняет преобразование типов, но при сбрасывании возвращает ноль, а не бросок.

Есть ли простой способ проверять приведение типов в Expression? Или я должен проверить на нулевое значение и сам выдать исключение?

Вот что у меня есть: -

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 Ответ

14 голосов
/ 27 июня 2011

Expression.Convert должен действовать здесь как актерский состав.

...