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