Überprüfte Typ-Cast in einem Ausdrucksbaum?

c# expression-trees

Frage

Ich verwende Expression, um ein wenig dynamisch generierten Code zu erstellen. Meine Lösung funktioniert, abgesehen von einem Feature: Ich möchte eine überprüfte Typumwandlung durchführen, bei der TypeCastException ausgelöst wird, wenn die Umsetzung fehlschlägt.

Ich habe Expression.TypeAs () gefunden, das die Typkonvertierung durchführt, aber es gibt null zurück, anstatt zu werfen, wenn der Cast fehlschlägt.

Gibt es eine einfache Möglichkeit, eine überprüfte Typumwandlung in Expression auszuführen? Oder muss ich nach Null suchen und die Ausnahme selbst werfen?

Folgendes habe ich:

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)),
   });

Akzeptierte Antwort

Expression.Convert sollte hier als Cast fungieren.



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum