.NET写一个自己的Lambda表达式与表达式树

这篇具有很好参考价值的文章主要介绍了.NET写一个自己的Lambda表达式与表达式树。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • LambdaExpression继承Expression
    .NET写一个自己的Lambda表达式与表达式树

  • Expression又继承LambdaExpressio
    .NET写一个自己的Lambda表达式与表达式树

所以,LambdaExpression与 Expression的区别在于:泛型类以静态类型的方法标识了它是什么种类的表达式,也就是说,他确定了返回类型和参数。所以显然,TDelegate必须是一个委托类型。
注意:并非所有的Lambda表达式都能转换成表达式树。不能将带有一个语句块(即使只有一个return语句)的Lambda转换成表达式树,只有对单个表达式进行求值的lambda才可以。表达式中不能包含赋值操作,因为在表达式中表示不了这种操作。
形式一

            //构建表达式树
            Expression<Func<double,double,double>> distanceCalc=(x,y)=>Math.Sqrt(x*x+y*y);
            double distanceResult = distanceCalc.Compile()(3,4);
            Console.WriteLine(distanceResult);

形式二

            //手动实现Lambda表达式
            //所需方法
            var sqrtMethod = typeof(Math).GetMethod("Sqrt", new[] { typeof(double) }) ?? throw new InvalidOperationException("Math.Sqrt not found!");
            //参数
            var xParameter = Expression.Parameter(typeof(double), "x");
            var yParameter = Expression.Parameter(typeof(double), "y");
            var xSquared = Expression.Multiply(xParameter, xParameter);
            var ySquared = Expression.Multiply(yParameter, yParameter);
            var sum = Expression.Add(xSquared, ySquared);
            //创建MethodCallExpression
            var distance = Expression.Call(sqrtMethod, sum);
            //将call转换为lambda表达式
            var distanceLambda = Expression.Lambda(
                distance,
                xParameter, yParameter);
            var distanceFunc = (Func<double, double, double>)distanceLambda.Compile();
            var res=distanceFunc(3, 4);
            Console.WriteLine(res);

输出结果
.NET写一个自己的Lambda表达式与表达式树文章来源地址https://www.toymoban.com/news/detail-540500.html

到了这里,关于.NET写一个自己的Lambda表达式与表达式树的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【JAVA】包装类、正则表达式、Arrays类、Lambda表达式

    包装类是8种基本数据类型对应的引用类型 作用:后期的集合和泛型不支持基本类型,只能使用包装类 基本数据类型和其对应的引用数据类型的变量可以互相赋值 基本数据类型 引用数据类型 byte Byte short Short int Integer long Long char Character float Float double Double boolean Boolean 包装类

    2024年02月13日
    浏览(43)
  • 23.Lambda表达式

    Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。Lambda表达式是Java SE 8中一个重要的新特性。

    2024年02月03日
    浏览(31)
  • Java Lambda 表达式

    💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Java Lambda 表达式是 Java 8 引入的一种函数式编程特性,它是一种轻量级的匿名函数,允许我们将函数作为方法的参数进行传递。Lambda 表达式可以理解为是一种简洁的方式来表示可传递的代码块,它可以替代传统的匿名内

    2024年02月08日
    浏览(45)
  • 深入理解lambda表达式

    var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); app.Use(async (context, next) = { // Add code before request. }); 这段C#代码是用于设置ASP.NET Core应用中的中间件。下面是详细解释: app.Use : 这个方法是用来向应用的请求处理管道中添加一个中间件的。在ASP.NET Core中,中间件用于处

    2024年02月20日
    浏览(31)
  • Lambda表达式(JAVA)

    注:如果没有学过 匿名内部类 和 接口 不推荐往下看。 (parameters) - expression 或 (parameters) -{ statements; } parameters:表示参数列表; -:可理解为“被用于”的意思; expression:表示一条语句; statements:表示多条语句。 Lambda可以理解为:Lambda就是匿名内部类的简化。 lambda表达式

    2024年02月08日
    浏览(45)
  • Java Lambda表达式

    1.1 函数式编程思想概括 在数学中,函数就是有输入量、输出量的一套计算方案,也就是“拿数据做操作” 面向对象思想强调“必须通过对象的形式来做事情” 函数式思想则尽量忽略面

    2024年02月07日
    浏览(47)
  • 9.4 Lambda表达式

    2024年01月22日
    浏览(35)
  • 什么是Lambda表达式?

    Lambda表达式是Java 8引入的一个重要特性,用于简化函数式编程中的匿名函数的定义和使用。它可以被视为一种轻量级的匿名函数,可以作为参数传递给方法或存储在变量中。 Lambda表达式的语法形式如下: 其中: parameters:表示方法的参数列表,可以是空的,或者包含一个或多

    2024年02月09日
    浏览(33)
  • 「JavaSE」Lambda表达式

    🎇 个人主页 :Ice_Sugar_7 🎇 所属专栏 :快来卷Java啦 🎇 欢迎点赞收藏加关注哦! Lambda表达式是Java SE 8中一个重要的新特性,基于数学中的λ演算得名,也可称为闭包, 它允许我们通过 表达式 代替功能接口 和方法类似,Lambda表达式提供了一个正常的参数列表和一个使用这

    2024年04月11日
    浏览(40)
  • Lambda表达式常用场景

    如果你的集合里泛型是ListString,那么可以直接用String.join(\\\",\\\",你的集合),把它变为字符串。 String.join(\\\",\\\", yourList) 但是如果你的集合是,ListInteger、ListLong,那么String.join这个方法就不适应了. 你可以用lamba表达式 String string= longs.stream().map(Object::toString).collect(Collectors.joining(\\\",\\\")); 方

    2024年02月11日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包