.NET (三)委托第三讲:内置委托Action
.NET 为我们提供了无返回值的内置委托 Action,代码如下:
// 摘要: // 封装一个方法,该方法只有一个参数并且不返回值。 // // 参数: // obj: // 此委托封装的方法的参数。 // // 类型参数: // T: // 此委托封装的方法的参数类型。 public delegate void Action<in T>(T obj);
现在我们对集合中的元素自定义排序。
定义排序方法:
//排序 public static void MySort(List<int> list, Action<List<int>> act) { act(list); }
方法接受一个Action的泛型委托,对list进行排序。
使用冒泡排序方式,对集合中的元素进行排序。
class Class3 { static void Main(String[] args) { List<int> list = new List<int>(); list.Add(1); list.Add(2); list.Add(3); list.Add(4); list.Add(5); list.Add(7); list.Add(6); //系统内置委托 Action<List<int>> act = new Action<List<int>>(SortFunc); //无返回值 Action MySort(list, SortFunc); foreach (int i in list) { Console.WriteLine(i); } } //排序方法 public static void SortFunc(List<int> array) { for (int i = 0; i < array.Count - 1; i++) { for (int j = 0; j < i; j++) { if (array[i] > array[i + 1]) { var temp = array[i + 1]; array[i + 1] = array[i]; array[i] = temp; } } } } //调用排序 public static void MySort(List<int> list, Action<List<int>> act) { act(list); } }
同样可以省略委托名,如下:
MySort(list, delegate(List<int> array) { for (int i = 0; i < array.Count - 1; i++) { for (int j = 0; j < i; j++) { if (array[i] > array[i + 1]) { var temp = array[i + 1]; array[i + 1] = array[i]; array[i] = temp; } } } });
使用lamada语句:
MySort(list, (List<int> array)=> { for (int i = 0; i < array.Count - 1; i++) { for (int j = 0; j < i; j++) { if (array[i] > array[i + 1]) { var temp = array[i + 1]; array[i + 1] = array[i]; array[i] = temp; } } } });