1、简洁性:使用更少的代码实现相同的功能
MyDelegate myDelegate2 = delegate (string a) {
Console.WriteLine(a);
};
myDelegate2("委托调用匿名函数");
//使用Action调用匿名函数
Action<string> action1 = delegate (string a) {
Console.WriteLine(a);
};
action1("使用Action来调用匿名函数");
2、灵活性:匿名方法可以作为参数传递给方法,也可以当作返回值返回。
//使用Func调用匿名函数
Func<int, int, int> func1 = delegate (int a, int b) {
return a + b;
};
Console.WriteLine(func1(100, 200)); //300
3、可读性:因为代码变少了,所以结构更加清晰易懂。
//如果没有参数,那么可以进一步的简写
//使用Action调用没有参数的匿名函数
Action greet = delegate { Console.WriteLine("这是简写的方法"); };
greet();
//lambda表达式,本质也是匿名函数,也叫箭头函数
Action greet2 = () => { Console.WriteLine("这是最简单的写法"); };
greet2();
//使用Func调用匿名函数(箭头函数)
Func<int, int, int> func2 = (int a, int b) => { return a + b; };
Console.WriteLine(func2(1, 2));
//继续简化,根据前面泛型约束传入的类型,后面箭头函数里面就不用写类型了
Func<int, int, int> func3 = (a, b) => { return a + b; };
Console.WriteLine(func3(10, 20));
匿名函数支持多播(多个委托一起执行),一个委托,代表了多个方法
Action<string> test = a => { Console.WriteLine("test" + a); };
test += a => { Console.WriteLine(a); };
test("hello");//testhello hello 执行两次
开发当中临时需要一个方法,而却方法的使用次数比较少,代码结构也比较简单。推荐使用匿名函数。
params string[] string 不管是几个参数只要类型正确都会添加到这个数组中
static string TestMothod(params string[] strings) {
string temp = "";
foreach (var item in strings) {
temp += item;
}
return temp;
}
//因为使用了params修饰,所以数量不固定
Console.WriteLine(TestMothod("1", "2", "3", "4"));