c# Action,Func,Predicate委托

System命名空间下已经预先定义好了三中泛型委托,Action,Func和Predicate,这样我们在编程的时候,就不必要自己去定义这些委托了

Action是没有返回值的

Func是带返回值的

不同的.netframework版本下,能定义的参数个数可能不同

Predicate,只有一个参数,返回值是bool型

 /// <summary>

        /// Action泛型委托:.netframework4下 可以有0到16个参数

        /// </summary>

        public void TestAction()

        {

            Action a1 = () => Console.WriteLine("嘿嘿");//Lambda表达式

            a1();



            Action<string> a2 = s => Console.WriteLine("你好," + s);

            a2("阿牛");



            Action<int, int> a3 = delegate(int a, int b) {//匿名方法

                Console.WriteLine("a+b=" + (a + b));

            };

            a3(4, 5);

        }





        /// <summary>

        /// Func泛型委托:

        /// </summary>

        public void TestFunc()

        {

            Func<string> func1 = () => "你好";//表达式Lambda

            Console.WriteLine(func1());



            Func<string, string> func2 = s => { return "你好" + s; };//语句Lambda

            Console.WriteLine(func2("阿牛"));



            Func<int, int, int> func3 = delegate(int a, int b)//匿名方法

            {

                return a + b;

            };

            Console.WriteLine(func3(4, 5));

        }



        /// <summary>

        /// Predicate泛型委托

        /// </summary>

        public void TestPredicate()

        {

            Predicate<int> pre1 = a => a == 2;

            if (pre1(3))

            {

                Console.WriteLine("3==2");

            }

            else

            {

                Console.WriteLine("3<>2");

            }



            List<string> list = new List<string>();

            list.Add("A1");

            list.Add("A2");

            list.Add("B1");



            List<string> list2 = list.FindAll(s => s.StartsWith("B"));

            List<string> list3 = list.FindAll(delegate(string s) {

                return s.StartsWith("B");

            });

        }

 

你可能感兴趣的:(action)