亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

生成 Expression.Assign 以設置小數時出現異常?從十進制

生成 Expression.Assign 以設置小數時出現異常?從十進制

C#
米琪卡哇伊 2021-08-22 14:54:05
我在構建表達式時遇到了一個有趣的問題。我進行了一些基本的類型強制檢查以確保完成最少的強制轉換,但是,我遇到了一個我沒想到的問題。當我嘗試生成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;}
查看完整描述

2 回答

?
冉冉說

TA貢獻1877條經驗 獲得超1個贊

存在從不可為空值類型到相應的可為空值類型的隱式轉換。您生成的表達式必須是顯式的。無法生成將 Int32 分配給 Int64 類型變量的表達式的相同原因。編譯器顯式生成轉換調用,因此您不必這樣做。試試看,你會看到。


您必須添加轉換。


var param = Expression.Variable(typeof(decimal?));

var value = Expression.Constant(20m, typeof(decimal));

var expr = Expression.Assign(param,

    //value // fails

    Expression.Convert(value, param.Type)

);


查看完整回答
反對 回復 2021-08-22
  • 2 回答
  • 0 關注
  • 187 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號