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

问题描述 投票:0回答:1

给定一个字符串:“5.2m * 5.7m”,返回类型为Decimal;并打电话

`System.Linq.Dynamic.DynamicExpression.Parse(returnType, expression);`

关于位置上的字符是'm'会给出语法错误;经过一些测试,同样适用于'd';为了给出一些上下文,使用m的原因是避免另一个错误,它是double * decimal的乘法,因为它默认将浮点值解释为double。

我的问题是:为什么会这样?什么是解决双*小数问题的最佳方案?通过(十进制)5.7转换我知道的值为十进制或使用Convert.ToDecimal(5.7)?parse()知道多少确实?(我没有找到关于msdn之类的文档)

c# dynamic
1个回答
0
投票

我的问题是:为什么会这样?

发生这种情况是因为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"进行显式转换,其中type是类型名称,可选地后跟?,expr是表达式或字符串是字符串文字。此语法可用于执行以下转换:

  • 在两种类型之间提供Type.IsAssignableFrom在一个或两个方向上都是正确的。
  • 在两种类型之间提供一种或两种是接口类型。
  • 在任何值类型的可空和非可空形式之间。
  • 在字符串和任何具有静态TryParse方法的类型之间。
  • 在属于SByteByteInt16UInt16Int32UInt32Int64UInt64DecimalSingleDoubleChar,任何枚举类型以及这些类型的可空形式的集合中的任何两种类型之间。
© www.soinside.com 2019 - 2024. All rights reserved.