当前位置: 首页 > news >正文

城乡厅建设部网站广告制作公司转型

城乡厅建设部网站,广告制作公司转型,wordpress 便签,电脑ps软件有免费的吗一、引子功能需求 我们创建了一个 School 对象#xff0c;其中包含了教师列表和学生列表。现在#xff0c;我们需要计算教师平均年龄和学生平均年龄。 //创建对象 School school new School() {Name 小菜学园,Teachers new ListTeacher(){new Teach…一、引子·功能需求 我们创建了一个 School 对象其中包含了教师列表和学生列表。现在我们需要计算教师平均年龄和学生平均年龄。 //创建对象 School school new School() {Name 小菜学园,Teachers new ListTeacher(){new Teacher() {Name波老师,Age26},new Teacher() {Name仓老师,Age28},new Teacher() {Name悠老师,Age30},},Students new ListStudent(){new Student() {Name小赵,Age22},new Student() {Name小钱,Age23},new Student() {Name小孙,Age24},},//这两个值如何计算TeachersAvgAge ,StudentsAvgAge , };如果我们将计算教师平均年龄的公式交给用户定义那么用户可能会定义一个字符串来表示 Teachers.Sum(Age)/Teachers.Count 或者可以通过lambda来表示: teachers.Average(teacher teacher.Age) 此时我们就获得了字符串类型的表达式如何进行解析呢 二、构建字符串表达式 手动构造 这种方式是使用 Expression 类手动构建表达式虽然不符合我们的实际需求但是它是Dynamic.Core底层实现的方式。Expression 类的文档地址为Expression 类 (System.Linq.Expressions) | Microsoft Learn // 创建参数表达式 var teachersParam Expression.Parameter(typeof(Teacher[]), teachers);// 创建变量表达式 var teacherVar Expression.Variable(typeof(Teacher), teacher);// 创建 lambda 表达式 var lambdaExpr Expression.LambdaFuncTeacher[], double(Expression.Block(new[] { teacherVar }, // 定义变量Expression.Call(typeof(Enumerable),Average,new[] { typeof(Teacher) },teachersParam,Expression.Lambda(Expression.Property(teacherVar, // 使用变量nameof(Teacher.Age)),teacherVar // 使用变量))),teachersParam );// 编译表达式树为委托 var func lambdaExpr.Compile();var avgAge func(teachers);使用System.Linq.Dynamic.Core System.Linq.Dynamic.Core 是一个开源库它提供了在运行时构建和解析 Lambda 表达式树的功能。它的原理是使用 C# 语言本身的语法和类型系统来表示表达式并通过解析和编译代码字符串来生成表达式树。 // 构造 lambda 表达式的字符串形式 string exprString teachers.Average(teacher teacher.Age);// 解析 lambda 表达式字符串生成表达式树 var parameter Expression.Parameter(typeof(Teacher[]), teachers); var lambdaExpr DynamicExpressionParser.ParseLambda(new[] { parameter }, typeof(double), exprString);// 编译表达式树为委托 var func (FuncTeacher[], double)lambdaExpr.Compile();// 计算教师平均年龄 var avgAge func(teachers);三、介绍System.Linq.Dynamic.Core 使用此动态 LINQ 库我们可以执行以下操作 通过 LINQ 提供程序进行的基于字符串的动态查询。动态分析字符串以生成表达式树例如ParseLambda和Parse方法。使用CreateType方法动态创建数据类。 功能介绍 普通的功能此处不赘述如果感兴趣可以从下文提供文档地址去寻找使用案例。 添加自定义方法类 可以通过在静态帮助程序/实用工具类中定义一些其他逻辑来扩展动态 LINQ 的分析功能。为了能够做到这一点有几个要求 该类必须是公共静态类此类中的方法也需要是公共的和静态的类本身需要使用属性进行注释[DynamicLinqType] [DynamicLinqType] public static class Utils {public static int ParseAsInt(string value){if (value null){return 0;}return int.Parse(value);}public static int IncrementMe(this int values){return values 1;} }此类有两个简单的方法 当输入字符串为 null 时返回整数值 0否则将字符串解析为整数 使用扩展方法递增整数值 用法 var query new [] { new { Value (string) null }, new { Value 100 } }.AsQueryable(); var result query.Select(Utils.ParseAsInt(Value)); 除了以上添加[DynamicLinqType]属性这样的方法我们还可以在配置中添加。 public class MyCustomTypeProvider : DefaultDynamicLinqCustomTypeProvider {public override HashSetType GetCustomTypes() new[] { typeof(Utils)}.ToHashSet(); }文档地址 源码地址GitHub - zzzprojects/System.Linq.Dynamic.Core: The .NET Standard / .NET Core version from the System Linq Dynamic functionality.文档地址Overview in Dynamic LINQ 使用项目 规则引擎RulesEngine中解析表达式的实现Home · microsoft/RulesEngine Wiki · GitHub自己封装了低代码中公式编辑器中公式的解析功能 四、浅析System.Linq.Dynamic.Core System.Linq.Dynamic.Core中 DynamicExpressionParser 和 ExpressionParser 都是用于解析字符串表达式并生成 Lambda 表达式树的类但它们之间有一些不同之处。 ExpressionParser 类支持解析任何合法的 C# 表达式并生成对应的表达式树。这意味着您可以在表达式中使用各种运算符、方法调用、属性访问等特性。 DynamicExpressionParser 类则更加灵活和通用。它支持解析任何语言的表达式包括动态语言和自定义 DSL领域特定语言 我们先看ExpressionParser这个类它用于解析字符串表达式并生成 Lambda 表达式树。 我只抽取重要的和自己感兴趣的属性和方法。 TextParser 类实现算法有点类似于有限状态自动机FSM 力扣LeetCode官网 - 全球极客挚爱的技术成长平台MethodFinder使用了反射机制通过调用 GetMethods() 方法获取指定类型中定义的所有方法并根据参数数量和类型等条件检查参数是否符合特定的条件。如果参数满足了条件则将该方法添加到结果列表中。 public class ExpressionParser {//字符串解析器的配置,比如区分大小写、是否自动解析类型、自定义类型解析器等private readonly ParsingConfig _parsingConfig;//查找指定类型中的方法信息,通过反射获取MethodInfoprivate readonly MethodFinder _methodFinder;//用于帮助解析器识别关键字、操作符和常量值private readonly IKeywordsHelper _keywordsHelper;//解析字符串表达式中的文本,用于从字符串中读取字符、单词、数字等private readonly TextParser _textParser;//解析字符串表达式中的数字,用于将字符串转换为各种数字类型private readonly NumberParser _numberParser;//用于帮助生成和操作表达式树private readonly IExpressionHelper _expressionHelper;//用于查找指定名称的类型信息private readonly ITypeFinder _typeFinder;//用于创建类型转换器private readonly ITypeConverterFactory _typeConverterFactory;//用于存储解析器内部使用的变量和选项。这些变量和选项不应该由外部代码访问或修改private readonly Dictionarystring, object _internals new();//用于存储字符串表达式中使用的符号和值。例如如果表达式包含 0 占位符则可以使用 _symbols[0] 访问其值。private readonly Dictionarystring, object? _symbols;//表示外部传入的参数和变量。如果表达式需要引用外部的参数或变量则应该将它们添加到 _externals 中。private IDictionarystring, object? _externals;/// summary/// 使用TextParser将字符串解析为指定的结果类型./// /summary/// param nameresultType/param/// param namecreateParameterCtor是否创建带有相同名称的构造函数/param/// returnsExpression/returnspublic Expression Parse(Type? resultType, bool createParameterCtor true){_resultType resultType;_createParameterCtor createParameterCtor;int exprPos _textParser.CurrentToken.Pos;//解析条件运算符表达式Expression? expr ParseConditionalOperator();//将返回的表达式提升为指定类型if (resultType ! null){if ((expr _parsingConfig.ExpressionPromoter.Promote(expr, resultType, true, false)) null){throw ParseError(exprPos, Res.ExpressionTypeMismatch, TypeHelper.GetTypeName(resultType));}}//验证最后一个标记是否为 TokenId.End否则抛出语法错误异常_textParser.ValidateToken(TokenId.End, Res.SyntaxError);return expr;}// ?: operatorprivate Expression ParseConditionalOperator(){int errorPos _textParser.CurrentToken.Pos;Expression expr ParseNullCoalescingOperator();if (_textParser.CurrentToken.Id TokenId.Question){......}return expr;}// ?? (null-coalescing) operatorprivate Expression ParseNullCoalescingOperator(){Expression expr ParseLambdaOperator();......return expr;}// operator - Added Support for projection operatorprivate Expression ParseLambdaOperator(){Expression expr ParseOrOperator();......return expr;}}
http://www.pierceye.com/news/968858/

相关文章:

  • wordpress 网站死机php7.0 wordpress 设置
  • 免版权费自建网站自考本科官网
  • 使用ai做网站设计长沙建设网站哪家好
  • 建设行业网站价格公共服务标准化建设
  • 电商网站开发发展和前景网站建设案例多少钱
  • 网站建设特效代码做销售用什么网站
  • 如何做中英版网站上海到北京机票
  • 海淀网站建设枣庄微信官网小程序注册
  • 投诉网站制作事件营销的概念
  • 做网站一个程序员够吗企业互联网推广
  • 安徽省建设工程资料上传网站网站内容优化
  • 直接用apk 做登陆网站呢图网站场建设封面
  • 书店网站的建设网络服务器搭建
  • led灯网站模板电商网站开发人员人数
  • 南阳网站建设报价沧州南皮网站建设
  • 网站左侧分类导航菜单用PS做的个人网站图片
  • 返利网 网站开发青岛开发区建网站哪家好
  • 还能电子商务网站建设短网址生成站长工具
  • 有专门做网站的吗网站后台发表文章
  • 秦皇岛汽车网站制作广州网站建设 知名
  • 自己建网站数据怎么做惠州网站制作培训
  • 南山做网站的wordpress自助友链
  • php企业网站源码软件工程师发展前景
  • 如何从建设局网站上更换职称人员哪个网站可以免费做国外网站
  • 情侣博客网站模板下载学校网站建设调查报告
  • 平台网站开发是什么意思全屏的网站
  • 素材图库网站源码网站建设及推广培训班
  • 英国电商网站jsp旅游网站开发系统
  • 机关网站建设引导语开发一个企业网站需要多少钱
  • 徐汇网站推广挣钱最快的小游戏