DynamicExpression.Parse 在多大程度上识别 C# 符号?

给定一个字符串:“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 等的文档)


呼啦一阵风
浏览 189回答 1
1回答

肥皂起泡泡

我的问题是:为什么会发生这种情况?发生这种情况是因为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,Byte,Int16,UInt16,Int32,UInt32,Int64,UInt64,Decimal,Single,Double,Char,任何枚举类型,以及所述可空这些类型的形式。
打开App,查看更多内容
随时随地看视频慕课网APP