.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;
                        }
                    }

                }
            });

 

posted @ 2016-11-07 14:16  思如雨  阅读(361)  评论(0编辑  收藏  举报