.NET (三)委托第三讲:内置委托Action

时间:2020-12-05 04:10:11

.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();
list.Add();
list.Add();
list.Add();
list.Add();
list.Add();
list.Add(); //系统内置委托
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 = ; i < array.Count - ; i++)
{
for (int j = ; j < i; j++)
{
if (array[i] > array[i + ])
{
var temp = array[i + ];
array[i + ] = 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 = ; i < array.Count - ; i++)
{
for (int j = ; j < i; j++)
{
if (array[i] > array[i + ])
{
var temp = array[i + ];
array[i + ] = array[i];
array[i] = temp;
}
} }
});

使用lamada语句:

MySort(list, (List<int> array)=>
{
for (int i = ; i < array.Count - ; i++)
{
for (int j = ; j < i; j++)
{
if (array[i] > array[i + ])
{
var temp = array[i + ];
array[i + ] = array[i];
array[i] = temp;
}
} }
});