Project Icon

lambdaparser

运行时字符串表达式解析器 支持动态LINQ表达式树构建

LambdaParser是一款运行时字符串表达式解析工具,支持构建动态LINQ表达式树并编译为lambda委托。该项目兼容多个.NET版本,能处理算术运算、比较和条件判断等复杂表达式。它具备灵活的变量处理机制,支持自定义值比较和表达式缓存,适合在需要动态解析和计算字符串表达式的.NET应用中使用。

NReco LambdaParser

字符串表达式(公式、方法调用、属性/字段/数组访问器)的运行时解析器。LambdaParser构建动态LINQ表达式树并将其编译为lambda委托。类型在运行时解析,类似于动态语言。

NuGetWindows x64Linux
NuGet 发布AppVeyor测试
  • 可用于任何 .NET应用:net45(旧版.NET Framework应用)、netstandard1.3(.NET Core应用)、netstandard2.0(所有现代.NET应用)。
  • 支持任意数量的表达式参数(值可以通过字典或回调委托提供)
  • 支持算术运算(+, -, *, /, %)、比较运算(==, !=, >, <, >=, <=)、条件运算包括三元运算符(boolVal ? whenTrue : whenFalse)
  • 访问对象属性、调用方法和索引器、调用委托
  • 动态类型变量:自动执行类型转换以匹配方法签名或算术运算
  • 使用简化语法创建数组和字典:new dictionary{ {"a", 1}, {"b", 2} }new []{ 1, 2, 3}
  • 支持局部变量,可以在主表达式之前声明:var a = 5; var b = contextVar/total*100;(默认禁用,使用LambdaParser.AllowVars属性启用)

Nuget包:NReco.LambdaParser

var lambdaParser = new NReco.Linq.LambdaParser();

var varContext = new Dictionary<string,object>();
varContext["pi"] = 3.14M;
varContext["one"] = 1M;
varContext["two"] = 2M;
varContext["test"] = "test";
Console.WriteLine( lambdaParser.Eval("pi>one && 0<one ? (1+8)/3+1*two : 0", varContext) ); // --> 5
Console.WriteLine( lambdaParser.Eval("test.ToUpper()", varContext) ); // --> TEST

(更多表达式示例请参见单元测试

自定义值比较

默认情况下,LambdaParser使用ValueComparer进行值比较。您可以提供自己的实现或配置其选项以获得所需的行为:

  • ValueComparer.NullComparison决定如何处理与null的比较。有两个选项:
    • MinValue:null被视为任何类型的最小可能值 - 类似于.NET IComparer
    • Sql:null与任何类型都不可比较,包括另一个null - 类似于SQL
  • ValueComparer.SuppressErrors允许避免转换异常。如果在比较过程中出现错误,不会抛出异常,这意味着值不可比较(任何条件都导致false)。
var valComparer = new ValueComparer() { NullComparison = ValueComparer.NullComparisonMode.Sql };
var lambdaParser = new LambdaParser(valComparer); 

缓存表达式

UseCache属性决定LambdaParser是否应缓存解析后的表达式。默认情况下,UseCache设置为true,这意味着表达式会被缓存以提高重复评估相同表达式的性能。

因此,建议使用LambdaParser的单例实例,而不是每次都创建一个新实例。

如果您想节省内存,特别是在评估大量唯一表达式时,可以通过将UseCache设置为false来禁用缓存。

var lambdaParser = new LambdaParser();
lambdaParser.UseCache = false;

谁在使用这个?

NReco.LambdaParser在SeekTable.comPivotData微服务中投入生产使用(用于用户定义的计算多维数据集成员:公式、自定义格式化)。

许可证

版权所有 2016-2024 Vitaliy Fedorchenko 和贡献者

基于MIT许可证分发

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号