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

手机网站 兼容做新浪微博网站需要

手机网站 兼容,做新浪微博网站需要,网站免费建站k,百度推广售后服务电话一、引子功能需求 我们创建了一个 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.yutouwan.com/news/83619/

相关文章:

  • 网站认证打的钱怎么做分录公司装修会计分录
  • 衡州网站建设seo做外贸找生意上哪个网站
  • 手机设计logo软件长春网站优化教程
  • wordpress站内优化网站域名申请流程
  • 创意网站模板下载wordpress编辑媒体永久链接
  • 坦洲网站建设投资公司经营范围
  • 长沙专业的建站按效果付费wordpress后台编辑主题时提示:抱歉_该文件无法被编辑
  • 南通设计网站建设想要学做网站
  • 福州营销网站建设技术产品开发项目管理全流程
  • 谁会在阿里云建网站M97 网站建设网络公司整站源码
  • 网站建设开发感悟做破解网站合法
  • 河南省住房城乡和建设厅网站南通市城乡和住房建设局网站
  • 赞叹天河网站建设公司重庆工程建设标准化信息网
  • 网站建设合同规范室内设计师的网站
  • 织梦网站后台空白怎么建设境外网站
  • 东营市两学一做考试网站网站前端工程师
  • asp网站镜像代码wordpress+手册主题
  • 企业建设网站作用wordpress主题雪人yeti1.9.2
  • 我是做网站怎么赚钱吗福建宏盛建设集团网站
  • 直接进网站的浏览器打开wordpress短链识别
  • 滁州网站开发建立网站的流程的合理顺序
  • 国美在线网站建设seo发展现状
  • 狼雨seo网站排名查询wordpress 清理插件
  • 知名的网页制作公司推荐国外seo综合查询
  • 网站名字备案WordPress重新安装删除哪个
  • 个人开网站佛山网站建设拓客科技
  • 网站如何做外链2018电影网站建设的意义
  • 江苏做网站的公司哪家做网站
  • 保定市城乡规划建设局网站番禺建设网站专家
  • 青岛网站推广企业网站架构模板