C#基础——匿名函数和参数不固定的函数

匿名函数、参数不固定的函数

匿名函数:没有名字,又叫做lambda表达式,具有简洁,灵活,可读的特性。

具名函数:有名字的函数。

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修饰符

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"));

你可能感兴趣的:(C#,c#,开发语言)