我正在使用Expression來創建一些動態生成的代碼。我的解決方案有效,除了一個功能:我想做一個檢查類型轉換,如果轉換失敗,則拋出TypeCastException。
我找到了Expression.TypeAs(),它執行類型轉換,但是當轉換失敗時它返回null而不是throw。
是否有一種簡單的方法可以在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)),
});