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");
            });
        }

 

posted @ 2014-04-15 16:45  大侠的哥哥是菜鸟  阅读(219)  评论(0编辑  收藏  举报