这里讲了Lamda表达式的其中两种用法,委托与集合。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Lamda表达式 {
public delegate void DelOne();
public delegate void DelTwo(string name);
public delegate string DelThree(string name);
class Program {
static void Main(string[] args) {
// 注释部分是匿名函数
DelOne delOne = () => { }; //delegate () { };
DelTwo delTwo = (string name) => { }; //delegate (string name) { };
DelThree delThree = (string name) => { return name; }; //delegate (string name) { return name; };
// 匿名函数和Lamda表达式本质上是一样的
// Lamda表达式的另一种用法
List<int> list = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
// 使用Lamda表达式表示集合大于4的所有元素(n是随遍取的)
list.RemoveAll(n => n > 4); // 移除集合中所有大于4的元素
foreach (int values in list) {
Console.WriteLine(values);
}
Console.ReadKey();
}
}
}
运行截图:
补充:
-
Lambada表达式最常用的用法
new一个委托实例,然后在括号中初始化Lambda表达式。
// Lambada表达式最常用的用法 Func<int, int, int> func1 = new Func<int, int, int>((int a, int b) => { return a + b; }); Console.WriteLine(func1.Invoke(1, 2));
-
Lambda表达式简化版
不需要new,直接将Lambda表达式赋值给委托
// Lambda表达式简化版 Func<int, int, int> func2 = (int x, int y) => { return x - y; }; Console.WriteLine(func2.Invoke(2, 1));
-
Lambda表达式极简版(省略参数类型)
// Lambda表达式极简版(省略参数类型) Func<int, int, int> func3 = (i, j) => { return i * j; }; Console.WriteLine(func3.Invoke(1, 2));
因为这里试用到了系统的泛型委托,所以他会自动识别。
运行截图:
Lambda表达式-泛型委托的高级用法
// Lambda表达式-泛型委托的高级用法
static T AdvancedUsage<T> (Func<T, T, T> func, T a, T b) {
T divide = func.Invoke(a, b);
return divide;
}
将泛型委托作为参数传进去,调用时,使用Lambda表达式进行传参。
main函数中调用:
// Lambda表达式-泛型委托的高级用法
int res = AdvancedUsage((a, b) => { return a / b; }, 10, 2);
Console.WriteLine("结果:{0}", res);
全部代码展示:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _Lambda {
class __Lambda {
static void Main(string[] args) {
// Lambada表达式最常用的用法
Func<int, int, int> func1 = new Func<int, int, int>((int a, int b) => { return a + b; });
Console.WriteLine(func1.Invoke(1, 2));
// Lambda表达式简化版
Func<int, int, int> func2 = (int x, int y) => { return x - y; };
Console.WriteLine(func2.Invoke(2, 1));
// Lambda表达式极简版(省略参数类型)
Func<int, int, int> func3 = (i, j) => { return i * j; };
Console.WriteLine(func3.Invoke(1, 2));
// Lambda表达式-泛型委托的高级用法
int res = AdvancedUsage((a, b) => { return a / b; }, 10, 2);
Console.WriteLine("结果:{0}", res);
Console.ReadKey();
}
// Lambda表达式-泛型委托的高级用法
static T AdvancedUsage<T> (Func<T, T, T> func, T a, T b) {
T divide = func.Invoke(a, b);
return divide;
}
}
}