码迷,mamicode.com
首页 > Windows程序 > 详细

c#中匿名函数lamb表达式

时间:2016-07-06 23:04:20      阅读:280      评论:0      收藏:0      [点我收藏+]

标签:

c#中匿名函数lamb表达式

实例一:(其实,这样都是些语法糖)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    //c#中的匿名函数
    //申明一委托
    delegate void Del();
    class Program
    {

        static void show()
        {
            Console.WriteLine("show ......");
        }

        static void Test()
        {
            Del d = new Del(show);
            d();
        }
        static void Test2()
        {
            //你可以这么写....
            Del d = delegate()
            {
                Console.WriteLine("show......");
            };
            d();

            //你也可以这么写
            Del d1 = delegate
            {
                Console.WriteLine("show.....");
            };

            d1();
            //你还可以这么写;这就是lamb表达式;
            Del d2 = () =>
            {
                Console.WriteLine("show.....");
            };
            d2();

        }
        static void Main(string[] args)
        {

            Test2();
            Console.ReadLine();

        }
    }
}

  有参数的lamb表达式:

 

 static void Test()
        {
            //你可以这么写
            Dele d = delegate(int j)
            {
                Console.WriteLine(j);
            };
            d(12);

            Dele d1 = (j) => { Console.WriteLine(j); };
            d1(12);
            //这个就是有参参的lamb表达式;
        }

        static void Main(string[] args)
        {
            Test();
            Console.ReadLine();

        }

顺便提一下c#中的Action Func Predicate;

 Delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型。

Action是无返回值的泛型委托。

     Action 表示无参,无返回值的委托

     Action<int,string> 表示有传入参数int,string无返回值的委托

     Action<int,string,bool> 表示有传入参数int,string,bool无返回值的委托

     Action<int,int,int,int> 表示有传入4个int型参数,无返回值的委托

     Action至少0个参数,至多16个参数,无返回值。

 

Func是有返回值的泛型委托

   Func<int> 表示无参,返回值为int的委托

   Func<object,string,int> 表示传入参数为object, string 返回值为int的委托

   Func<object,string,int> 表示传入参数为object, string 返回值为int的委托

   Func<T1,T2,,T3,int> 表示传入参数为T1,T2,,T3(泛型)返回值为int的委托

   Func至少0个参数,至多16个参数,根据返回值泛型返回。必须有返回值,不可void

 (4) predicate

   predicate 是返回bool型的泛型委托

   predicate<int> 表示传入参数为int 返回bool的委托

   Predicate有且只有一个参数,返回值固定为bool

 

实例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;

namespace ConsoleApplication2
{
   
    delegate void Dele(int i);
    class Program
    {
        static void add(int i,int j)
        {
            Console.WriteLine(i+j);
        }
        static int sub(int i, int j)
        {
            return i - j;
        }

        static bool  isTrue(int i)
        {
            if (i > 0)
                return true;
            else
                return false;
        }

        static void Test()
        {

            List<Action<int,int>> list = new List<Action<int,int>>();
            list.Add(add);
            //调用方式一
            list[0](100,10);
            //最后一个参数是返回值;
            Func<int,int,int> func=sub;
            int result=func(100,10);
            Console.WriteLine(result);

            Predicate<int> p = isTrue;
            bool re = p(100);
            Console.WriteLine(re);
         
        }
        static void Test2()
        {
            //当然我们可以换一种方式写滴呀
            Action<int, int> action = delegate(int i, int j)
            {
                Console.WriteLine(i+j);
            };
            action(100,10);

            Func<int, int, int> func = delegate(int i, int j)
            {
                return i - j;
            };
            int result = func(100,10);

            Predicate<int> pre = delegate(int i)
            {
                bool re=
                i==0?true: false;
                return re;
            };

        }
        static void Test3()
        {
            //当然我们也可以这样写滴呀
            Action<int, int> action = (i, j) => { Console.WriteLine(i + j); };
            action(100,10);

            Func<int,int,int> func=(i,j)=>{return i-j;};
            int result=func(100,10);

            Predicate<int> pre = (i) => { if (i == 0)return true; else return false; };
            bool val = pre(100);

        }

        static void Test4()
        {
            Thread thread = new Thread(delegate()
            {
                Console.WriteLine("hahhahah....");
            });
            thread.Start();

            Thread thread2 = new Thread(() =>
            {
                Console.WriteLine("hahah......");
            });
            thread2.Start();
           
        }

        static void Main(string[] args)
        {
            //其实,就相当于这样滴呀:   public delegate void Action<T>(T arg);
            Test();
            Console.ReadLine();

        }
    }
}

 

c#中匿名函数lamb表达式

标签:

原文地址:http://www.cnblogs.com/mc67/p/5648219.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!