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
    }
}

猜你喜欢

转载自blog.csdn.net/SimulationPD/article/details/83417564