C# 的委托,到了 4.5+ 版本,已经发展的很友好了。

不再是之前的 delegate 自己定义,已经给我们内置了几个。可以解决绝大部分需求,又让大家的代码更符合规范。

总共分为 有返回值没有返回值 两类。

  1. 没有返回值,就用 ActionAction<T> 最多支持0-16个参数。
public delegate void Action();
public delegate void Action<in T1, in T2>(T1 arg1, T2 arg2);
// 比如
list.Foreach(x=>{ x.name += "xx-"; })
  1. 有返回值,使用 Func<T> 最多支持0-16个参数。最后一个是返回值。
public delegate TResult Func<in T1, in T2, out TResult>(T1 arg1, T2 arg2);
// 比如
list.Select(x=>x.Id)
list.Where(x=>x.Id>100)
  1. 还有个固定是 bool 类型返回值的定义 Func<T, bool> ==> Predicate<T> 多用在比较器上。
public delegate bool Predicate<in T>(T obj);

// 实例
Predicate<int> pd = val => { return val > 5;};
int[] arr = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 10 };
int first = Array.Find(arr, pd);