Lambda表达式、Lambda表达式树

1.Lambda表达式

基本形式:(input parameters参数) => expression表达式

使用空括号指定零个输入参数:() => { };

2.Lambda表达式树

 

(转)例子:(https://www.cnblogs.com/yunfeifei/p/3844814.html

using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using UnityEngine;

public class Lambda : MonoBehaviour
{
    // Use this for initialization
    void Start()
    {
        //简单Lambda
        List<string> citys = new List<string>()
        {
               "BeiJing",
               "ShangHai",
               "Tianjin",
               "GuangDong"
         };
        FindCityOld(citys);
        FindCityNew(citys);

        //使用Lambda表达式
        LambdaFun("BeiJing 2013", s =>
        {
            if (s.Contains("2013"))
            {
                s = s.Replace("2013", "2014");
            }
            return s;
        });

        //Lambda表达式树
        int[] temps = new int[4] { 1, 2, 3, 4 };
        LambdaFuns(temps);

    }

    void FindCityOld(List<string> citys)
    {
        for (int i = 0; i < citys.Count; i++)
        {
            if (citys[i].Length > 7)
            {
                var result = citys[i];
                //Debug.Log(result);
                break;
            }
        }
    }

    void FindCityNew(List<string> citys)
    {
        var result = citys.First(c => c.Length > 7);
        //Debug.Log(result);
    }

    /// <summary>
    /// 定义Lambda表达式
    /// </summary>
    /// <param name="str"></param>
    /// <param name="func"></param>
    void LambdaFun(string str, Func<string, string> func)
    {
        Debug.Log(func(str));
    }

    /// <summary>
    /// 表达式树动态创建
    /// </summary>
    /// <param name="args"></param>
    public void LambdaFuns(int[] strs)
    {
        //i*j+w*x
        //创建一个表达式树中的参数,作为一个节点,这里是最下层的节点
        ParameterExpression a = Expression.Parameter(typeof(int), "i");
        ParameterExpression b = Expression.Parameter(typeof(int), "j");
        //这里i*j,生成表达式树中的一个节点,比上面节点高一级
        BinaryExpression r1 = Expression.Multiply(a, b);

        ParameterExpression c = Expression.Parameter(typeof(int), "w");
        ParameterExpression d = Expression.Parameter(typeof(int), "x");
        BinaryExpression r2 = Expression.Multiply(c, d);

        BinaryExpression result = Expression.Add(r1, r2);   //运算两个中级节点,产生终结点
        //Debug.Log(result);

        Expression<Func<int, int, int, int, int>> lambda = Expression.Lambda<Func<int, int, int, int, int>>(result, a, b, c, d);
        //输出‘(i,j,w,x)=>((i*j)+(w*x))’,z对应参数b,p对应参数a
        //Debug.Log(lambda + "");

        //将表达式树描述的lambda表达式,编译为可执行代码,并生成该lambda表达式的委托;
        Func<int, int, int, int, int> f = lambda.Compile();
        //Debug.Log(f(strs[0], strs[1], strs[0], strs[0]));  //输出结果2
    }
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值