为了更好的了解Linq,分了四篇文章来总结,可能需要有一定的Linq使用经验,先简单介绍下委托的使用,不引申太多
委托(Delegate)是存有对某个方法的引用的一种引用类型变量,引用可在运行时被改变。 类似与 int i=5,委托可认为是方法的一个类型,像int。
C# 提供了两个泛型委托Action、Func,基本满足对委托的声明,也是目前最常用的
- Action 无返回值的泛型委托
- Func 必须有返回值的泛型委托
- Predicate 有且只有一个参数,返回值只为 bool 类型
- delegate 自定义委托
无返回值的委托示例
// 无参数,无返回值
委托1 d1_1 = new 委托1(A.fun1);
d1_1();
委托1 d1_2 = A.fun1;
d1_2();
Action d1_3 = A.fun1;
d1_3();
//有参数,无返回值
委托2 d2 = A.fun2;
d2("song");
Action<string> d2_1 = A.fun2;
d2_1("song");
delegate void 委托1();
delegate void 委托2(string msg);
class A
{
public static void fun1()
{
Console.WriteLine("无参数");
}
public static void fun2(string str)
{
Console.WriteLine(str);
}
}
最原始的方式
委托1 d1_1 = new 委托1(A.fun1);
d1_1();
简化版方式1
委托1 d1_2 = A.fun1;
d1_2();
使用微软的Action,不使用自定义的委托1
Action d1_3 = A.fun1;
d1_3();
有返回值示例
Func<int, int, string> sum = A.Add;
Console.WriteLine(sum(1,2));
var sum1 = A.Add;//var 自动推断类型,由此也可加深理解委托其实就是一个方法的类型
Console.WriteLine(sum1(1, 2));
class A
{
public static string Add(int a, int b)
{
return $"{a+b}";
}
}
其它不再示例说明,都类似
Linq如何使用(二)Lambda 声明委托Delegate - 简书 (jianshu.com)
Linq如何使用(三)使用Linq-自己写一个实现方法 - 简书 (jianshu.com)
Linq如何使用(四)-哪些地方用,如何用 - 简书 (jianshu.com)