C#——匿名方法和Lambda表达式

有一次看见别人的代码里=>以及花里胡哨的省略写法,就去整理了一下匿名方法和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关键字以及参数类型;

猜你喜欢

转载自blog.csdn.net/noEnoughChief/article/details/82385179