问题描述

按要求编写Lambda表达式:

.NET已定义的Func<out TResult>是一个泛型委托,它封装一个方法,该方法不具有参数,且返回由 TResult 参数指定的类型的值。它的基本用法是:

            Func<int> f1 = () => DateTime.Now.Year;//Lambda表达式无参数,返回int值,符合委托定义Console.WriteLine(f1());

该泛型委托有好几个同名兄弟类型,如Func<in T, out TResult>,Func <in T1, in T2, out TResult>等(直到T16)等,仿照上面的例子编写Lambda表达式,并调用它们:

(1)写一个Lambda表达式赋给Func<int, double> f2,使其完成取平方根功能(可用Math.Sqrt方法)。

(2)写一个Lambda表达式赋给Func<int, int, double> f3,使两个整数参数先平方,再相加,再取平方根。

(3)Predicate<T>泛型委托表示一个条件,是用于判断指定参数是否符合条件的方法的抽象。写一个Predicate<int>型Lambda表达式,并调用它。

(4)Action、Action<T>、Action<T1,T2>…等委托封装的方法,有0至16个参数,但没有返回值,试写出Action<String>和Action<int, List<int>>的Labmda表达式,并调用它们。

(调用它们时,如果需要参数,则自行生成;可以和Java中的Lambda表达式比较一下)

源代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Homework6
{class Program{static void Main(string[] args){Random random = new Random();Func<int> f1 = () => DateTime.Now.Year;//Lambda表达式无参数,返回int值,符合委托定义Console.WriteLine(f1());Func<int, double> f2 = (a) => Math.Sqrt(a);Console.WriteLine(f2(random.Next()));Func<int, int, double> f3 = (a,b)=> Math.Sqrt(a*a+b*b);Console.WriteLine(f3(random.Next(), random.Next()));Predicate<int> p1 = (a) => a>1;Console.WriteLine(p1(random.Next()));Action<String> a1 = (a) => { Console.WriteLine(a); };a1("hello world");Action<int, List<int>> a2 = (a, b) => { Console.WriteLine(b[a]); };List<int> list = new List<int>();for(int i = 0; i < 10; i++){list.Add(random.Next());}a2(2, list);}}
}

运行结果

C#——Lambda表达式与泛型委托DEMO相关推荐

  1. delegate、Lambda表达式、Func委托和Expression(TDelegate)表达式目录树

    1.delegate MSDN:一种安全地封装方法的类型,它与 C 和 C++ 中的函数指针类似.与 C 中的函数指针不同,委托是面向对象的.类型安全的和保险的.委托的类型由委托的名称定义 class ...

  2. lambda表达式方法泛型_模板方法模式–使用Lambda表达式,默认方法

    lambda表达式方法泛型 模板方法模式是Erich Gamma,Richard Helm,Ralph Johnson和John Vlissides在著名的< 设计模式>一书中解释的23种 ...

  3. lambda表达式不使用委托(delegate) 用FUNC

    lLambda不使用delegate关键字,而使用  Lambda运算符 => goes to l    1.Func<int,string> getInput = (int age ...

  4. 委托、Lambda表达式和事件

    1. 引用方法 委托是寻址方法的.NET版本.在C++中,函数指针只不过是一个指向内存位置的指针,它不是类型安全的.我们无法判断这个指针实际指向什么,像参数和返回类型等项就更无从知晓了.而.NET委托 ...

  5. 一起谈.NET技术,从.NET中委托写法的演变谈开去(中):Lambda表达式及其优势...

    在上一篇文章中我们简单探讨了.NET 1.x和.NET 2.0中委托表现形式的变化,以及.NET 2.0中匿名方法的优势.目的及注意事项.那么现在我们来谈一下.NET 3.5(C# 3.0)中,委托的 ...

  6. 从.NET中委托写法的演变谈开去(中):Lambda表达式及其优势

    在上一篇文章中我们简单探讨了.NET 1.x和.NET 2.0中委托表现形式的变化,以及.NET 2.0中匿名方法的优势.目的及注意事项.那么现在我们来谈一下.NET 3.5(C# 3.0)中,委托的 ...

  7. C#学习基本概念之匿名方法及Lambda表达式

    在 2.0 之前的 C# 版本中,声明委托的唯一方法是使用命名方法.  C# 2.0 引入了匿名方法,而在 C# 3.0 及更高版本中,Lambda 表达式取代了匿名方法,作为编写内联代码的首选方式. ...

  8. [C# 基础知识系列]专题十四:深入理解Lambda表达式

    引言: 对于刚刚接触Lambda表达式的朋友们,可能会对Lambda表达式感到非常疑惑,它到底是个什么什么样的技术呢?以及它有什么好处和先进的地方呢?下面的介绍将会解除你这些疑惑. 一.Lambda表 ...

  9. Java8 lambda表达式详解

    Scala中函数是一等公民,有大量的函数式编程,而Java1.8的新特性也加入了函数式编程,转载如下. 关键词:函数式接口.lambda表达式  作用:函数式编程.替换匿名内部类(利用lambda实现 ...

最新文章

  1. 解决 NDK is missing a “platforms“ directory.
  2. c语言选课系统课程设计,用C语言写一个 学生选课系统
  3. 数据结构---B-(B)、B+的总结
  4. zigbee是什么,为什么说它最适合智能家居设备
  5. MDL锁导致mysql夯住_MySQL MetaData Lock 案例分享
  6. eclipse3.6_jee启动tomcat无法访问http://localhost:8080/的解决方案
  7. 得到进程id_GDB调试多进程程序
  8. ACL 2021 | 火山翻译成绩斐然
  9. python爬取教务系统_python 爬取 强智科技教务系统(湖南)
  10. linux xampp使用教程,CentOS下安装XAMPP详细教程(学习记录使用)
  11. 常用HSQL汇总(不定时添加)
  12. 读取npy格式的文件
  13. python正则表达式提取网页的图片链接
  14. php 正则车架号,js 正则校验车架号VIN
  15. 020:闭区间上连续函数性质之零点定理、介值定理
  16. 推荐交互设计师阅读的一本书
  17. 2017282110258--高级软件工程--齐爽爽第一次作业
  18. 咱张家界桑植的野外小吃
  19. 论文投稿指南——中文核心期刊推荐(计算机技术)
  20. 计算机基本基础知识实训总结,计算机基础实训总结范文

热门文章

  1. js参数使用时常犯的一个低级错误
  2. web服务器网站网速慢的原因,apache配置优化 - 解决apache环境下网站访问速度慢的问题...
  3. 安装后添加没有class library_Catalina的L/E Kext驱动安装方式
  4. python和java二选一该学啥_Python和Java二选一该学啥?
  5. antimalware service executable占用内存过高_Win10系统svchost.exe进程占用内存和网速过高的解决方法...
  6. java同名不同包文件_java – 如何从不同的JAR读取同名的几个资源文件?
  7. mac 黑窗口连接mysql_Mac系统Python、PyCharm安装及使用方法详解
  8. 设置Tomcat字符编码UTF-8
  9. linux下mysql的备份_Linux下MySQL的备份与还原
  10. java跨用问题怎么解决_跨浏览器问题的五种解决方案