有一次看见别人的代码里=>以及花里胡哨的省略写法感觉好炫酷,就去整理了一下匿名方法和Lambda表达式的写法。
匿名函数的一些写法:
1.无返回值类型
Action<string> tellName = delegate(string name){
Debug.log("My Name is "+name);
};
2.委托为方法参数时,省略构造委托实例
List<int> listArray = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
listArray.ForEach (
delegate(int i) { Console.WriteLine(i.ToString()); }
);
3.委托有返回值的时候
Func<int, int, int> func = delegate (int a, int b) { return a - b; };
Predicate<Product> func = delegate (Product obj) { return obj.IsGood; };
Predicate<>是返回bool类型的C#内置委托;
4.事件绑定时
this.OnClick+= delegate(int index){ Debug.Log("Click Index is "+index );};
Lambda表达式
lambda表达式自身并非委托类型,但可以通过多种隐示或显示方法转化为委托实例,是匿名方法的进一步演化和简化;
1.无返回值类型
Action<string> tellName = (string name)=>{
Debug.log("My Name is "+name);
};
2.委托为方法参数时
List<int> listArray = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
listArray.ForEach (
i => Console.WriteLine(i.ToString())
);
3.委托有返回值的时候
Func<int, int, string> func = (int a, int b)=>(a-b).ToString(); //操作只有1行省略{},省略return
Func<string> func= ()=> "Hello"; //无参数直接用()
Func<int ,int ,string> func = (a,b)=> (a-b).ToString(); //让编译器进行类型推断,无需显示指定参数类型
Func<int, string> func = i => i.ToString() ; //只要一个参数,省略(),直接写i
Func<int ,int> func = (i)=>{ //如果操作超过1行,就需要加{},有返回值写return
i++;
return i;
};
如果委托需要的参数为ref/out,则需要显示指明ref/out关键字以及参数类型;