c#中匿名函数lamb表达式

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();

        }
    }
}
时间: 2024-11-05 22:54:10

c#中匿名函数lamb表达式的相关文章

JS的三种使用方式/CSS的三种使用方式/JS中的DOM事件模型/JS中匿名函数的书写及调用/媒体查询@media的三种使用方式

一.JS的三种使用方式 1.html标签中内嵌JS(不提倡使用.)                <button onclick="javascript:alert('你真点啊.')" > 有本事点我呀!!!!</button>                                2.HTML页面中直接使用JS:                <script type="text/javascript">        

python进阶一(函数式编程)【2-7 python中匿名函数】

python中匿名函数 高阶函数可以接收函数做参数,有些时候,我们不需要显式地定义函数,直接传入匿名函数更方便. 在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算 f(x)=x2 时,除了定义一个f(x)的函数外,还可以直接传入匿名函数: 1 >>> map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9])#lambda x 就是定义的一个函数, x * x就是直接传入的函数 2 [1, 4, 9, 16, 25, 36

JavaScript中匿名函数的多种写法

匿名函数没有实际名字,也没有指针,怎么执行滴?  其实大家可以看看小括号的意义就应该可以理解.小括号有返回值,也就是小括号内的函数或者表达式的返回值,所以说小括号内的function返回值等于小括号的返回值,不难理解 (function(){})()可以将没有名字的函数执行了把- 关于匿名函数写法,很发散~ 最常见的用法: 代码如下: (function() { alert('water'); })(); 当然也可以带参数: 代码如下: (function(o) { alert(o); })('

递归/匿名函数/三元表达式/列表生成式/字典生成式/二分算法

让在下揭开尔等的面纱,一探究竟:) >>>递归: 递归是一个往复的过程,也就是由两个过程组成,一个是计算过程,一个是将值层层返回的过程,递归的奇妙之处,就在于自身调用自身,然后,过程遵循由复杂到简单,最终满足相应条件后,退出,返回结果.说了一大堆,不过直接上代码: test_list = [1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13,[14,]]]]]]]]]]]]]] res = 0 def sum_list(test_list, res): f

js中匿名函数

今天碰到一道题,里面既包含了匿名函数的知识,也包含了预编译,函数的传参(形参),感觉迷迷糊糊的,所以想着做个总结. var foo={n:1}; (function(foo){ console.log(foo.n); foo.n=3; var foo={n:2}; console.log(foo.n); })(foo); console.log(foo.n); 上面的代码,可以写成这样,看解释 1 var foo={n:1}; 2 (function(foo){ //此时形参和实参指向相同的内存

js中匿名函数的N种写法

匿名函数没有实际名字,也没有指针,怎么执行? 关于匿名函数写法,很发散~ +号是让函数声明转换为函数表达式.汇总一下 最常见的用法: 代码如下: (function() {  alert('water');  })();  当然也可以带参数: 代码如下: (function(o) {  alert(o);  })('water');  想用匿名函数的链式调用?很简单: 代码如下: (function(o) {  console.log(o);  return arguments.callee; 

总结下js中匿名函数的写法~好几天没写博客了。。。

小哥最近很是心烦啊,不仅仅要继续以现任前端小白,未来前端攻城狮的身份苦逼学习,还要用剩余的时间去完成毕业设计.早知如此,当初我为毛要报考数学这么个苦逼专业....昨天一整天的时间在研究毕设,感觉代码已经不认识我了...今天在学习中,突然发现了匿名函数的调用方法.原以为匿名函数是个高冷的生物,只有如下这一种调用方法: (function() { alert('water'); })(); 当然了...设参数跟上面是一样的方法: (function(i) { alert(i); })('water'

JS中匿名函数$(function(){ })和(function(){})()的区别

“$(function(){ });” Jquery语法的匿名函数,用于存放操作DOM对象的代码,执行其中代码时DOM对象已存在: (通过这样就可以在页面加载完成时通过ajax再异步加载一些数据) “(function(){})();”用于存放开发插件的代码,执行其中代码时DOM不一定存在; (用于在内容加载时或加载前加载) 举例: 该例子在浏览器中运行的时候会报错,究其原因(function(){...})()函数的执行时机并不是在DOM加载完毕后才执行,而是随着页面自上而下来执行 <html

python中匿名函数lambda如何用

python中经常用到的一个函数:匿名函数lambda ,什么是匿名函数?匿名函数的意义是什么?匿名函数怎么样用?(疑问三连,what,why,how) 一,什么是匿名函数? python中没有名字的函数,称为匿名函数.语法格式:lambda  x : x**2  既 lambda+形参:代码块 二,匿名函数的意义是什么? 一是它没有名字,所以不会引起命名冲突,二是它格式简单,代码块直接return返回值,比较灵活方便,而且因为没有名字,用完就丢弃了,不占内存. 三,匿名函数怎么用? 这个得举例