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

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

DynamicExpression.Parse 在多大程度上識別 C# 符號?

DynamicExpression.Parse 在多大程度上識別 C# 符號?

C#
呼啦一陣風 2022-01-09 09:59:54
給定一個字符串:“5.2m*5.7m”,返回類型為十進制;并打電話`System.Linq.Dynamic.DynamicExpression.Parse(returnType, expression);`將給出關于位置字符“m”的語法錯誤;經過一些測試,同樣適用于“d”;為了提供一些上下文,使用 m 的原因是為了避免另一個錯誤,即 double*decimal 的乘法,因為它會將浮點值默認解釋為 double。我的問題是:為什么會發生這種情況?解決雙 * 十進制問題的最佳方案是什么?通過(十進制)5.7 轉換我知道的值是十進制還是使用 Convert.ToDecimal(5.7)?parse() 到底知道多少?(我沒有找到有關 msdn 等的文檔)
查看完整描述

1 回答

?
肥皂起泡泡

TA貢獻1829條經驗 獲得超6個贊

我的問題是:為什么會發生這種情況?

發生這種情況是因為DynamicExpression使用了自定義構建的表達式解析器。它被制作成類似于 C#,但它不是 C#。并非所有在 C# 中有效的東西都能正常工作,而且在 C# 中有效的一些東西的工作方式也不同。

解決雙 * 十進制問題的最佳方案是什么?通過(十進制)5.7 轉換我知道是十進制的值還是使用 Convert.ToDecimal(5.7)?

投射,但不使用這種語法。使用的語法是type(expr),不是(type)expr,見下文。

parse() 到底知道多少?(我沒有在 msdn 等上找到文檔)

原始文檔的副本似乎可在http://ak-dynamic-linq.azurewebsites.net/GettingStarted 獲得。我尚未驗證整個文檔是否未經修改,但我已將以下內容與原始文檔進行了比較。

去引用:

表達式語言允許使用語法顯式轉換type(expr)type"string",其中類型是類型名稱任選地接著?EXPR是一個表達式或是字符串文字。此語法可用于執行以下轉換:

  • 提供的兩種類型之間Type.IsAssignableFrom在一個或兩個方向上都是正確的。

  • 在提供的兩種類型之間,一種或兩種是接口類型。

  • 介于任何值類型的可空和不可空形式之間。

  • 在字符串和任何具有靜態 TryParse 方法的類型之間。

  • 屬于包括以下各項的集合中的任何兩種類型之間SByte,ByteInt16,UInt16,Int32,UInt32Int64,UInt64Decimal,SingleDouble,Char,任何枚舉類型,以及所述可空這些類型的形式。


查看完整回答
反對 回復 2022-01-09
  • 1 回答
  • 0 關注
  • 223 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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