我在构建表达式时遇到了一个有趣的问题。我进行了一些基本的类型强制检查以确保完成最少的强制转换,但是,我遇到了一个我没想到的问题。
当我尝试生成BinaryExpressionusingExpression.Assign并且我将从decimal到decimal?我收到异常:
System.ArgumentException: 'System.Decimal' 类型的表达式不能用于分配给类型 'System.Nullable'1[System.Decimal]
有人可以解释一下吗?考虑到以下评估为真:
typeof(decimal?).IsAssignableFrom(typeof(decimal))
预期的分配应等于以下语句:
decimal? x = null;
decimal y = 10;
x = y;
有问题的代码:
private Expression BuildMapExpressionForValueMap(MemberInfo destinationProperty, MemberInfo sourceProperty)
{
Expression assignmentExpression = Expression.PropertyOrField(_source, sourceProperty.Name);
Type destinationType = destinationProperty.GetUnderlyingType();
if (!destinationType.IsAssignableFrom(sourceProperty.GetUnderlyingType()))
{
assignmentExpression = BuildCastExpression(assignmentExpression, destinationType);
}
var expression = Expression.Assign(Expression.PropertyOrField(_destination, destinationProperty.Name)
, assignmentExpression);
return expression;
}
冉冉说
相关分类