C#——Lambda表达式与泛型委托DEMO
问题描述
按要求编写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相关推荐
- delegate、Lambda表达式、Func委托和Expression(TDelegate)表达式目录树
1.delegate MSDN:一种安全地封装方法的类型,它与 C 和 C++ 中的函数指针类似.与 C 中的函数指针不同,委托是面向对象的.类型安全的和保险的.委托的类型由委托的名称定义 class ...
- lambda表达式方法泛型_模板方法模式–使用Lambda表达式,默认方法
lambda表达式方法泛型 模板方法模式是Erich Gamma,Richard Helm,Ralph Johnson和John Vlissides在著名的< 设计模式>一书中解释的23种 ...
- lambda表达式不使用委托(delegate) 用FUNC
lLambda不使用delegate关键字,而使用 Lambda运算符 => goes to l 1.Func<int,string> getInput = (int age ...
- 委托、Lambda表达式和事件
1. 引用方法 委托是寻址方法的.NET版本.在C++中,函数指针只不过是一个指向内存位置的指针,它不是类型安全的.我们无法判断这个指针实际指向什么,像参数和返回类型等项就更无从知晓了.而.NET委托 ...
- 一起谈.NET技术,从.NET中委托写法的演变谈开去(中):Lambda表达式及其优势...
在上一篇文章中我们简单探讨了.NET 1.x和.NET 2.0中委托表现形式的变化,以及.NET 2.0中匿名方法的优势.目的及注意事项.那么现在我们来谈一下.NET 3.5(C# 3.0)中,委托的 ...
- 从.NET中委托写法的演变谈开去(中):Lambda表达式及其优势
在上一篇文章中我们简单探讨了.NET 1.x和.NET 2.0中委托表现形式的变化,以及.NET 2.0中匿名方法的优势.目的及注意事项.那么现在我们来谈一下.NET 3.5(C# 3.0)中,委托的 ...
- C#学习基本概念之匿名方法及Lambda表达式
在 2.0 之前的 C# 版本中,声明委托的唯一方法是使用命名方法. C# 2.0 引入了匿名方法,而在 C# 3.0 及更高版本中,Lambda 表达式取代了匿名方法,作为编写内联代码的首选方式. ...
- [C# 基础知识系列]专题十四:深入理解Lambda表达式
引言: 对于刚刚接触Lambda表达式的朋友们,可能会对Lambda表达式感到非常疑惑,它到底是个什么什么样的技术呢?以及它有什么好处和先进的地方呢?下面的介绍将会解除你这些疑惑. 一.Lambda表 ...
- Java8 lambda表达式详解
Scala中函数是一等公民,有大量的函数式编程,而Java1.8的新特性也加入了函数式编程,转载如下. 关键词:函数式接口.lambda表达式 作用:函数式编程.替换匿名内部类(利用lambda实现 ...
最新文章
- 解决 NDK is missing a “platforms“ directory.
- c语言选课系统课程设计,用C语言写一个 学生选课系统
- 数据结构---B-(B)、B+的总结
- zigbee是什么,为什么说它最适合智能家居设备
- MDL锁导致mysql夯住_MySQL MetaData Lock 案例分享
- eclipse3.6_jee启动tomcat无法访问http://localhost:8080/的解决方案
- 得到进程id_GDB调试多进程程序
- ACL 2021 | 火山翻译成绩斐然
- python爬取教务系统_python 爬取 强智科技教务系统(湖南)
- linux xampp使用教程,CentOS下安装XAMPP详细教程(学习记录使用)
- 常用HSQL汇总(不定时添加)
- 读取npy格式的文件
- python正则表达式提取网页的图片链接
- php 正则车架号,js 正则校验车架号VIN
- 020:闭区间上连续函数性质之零点定理、介值定理
- 推荐交互设计师阅读的一本书
- 2017282110258--高级软件工程--齐爽爽第一次作业
- 咱张家界桑植的野外小吃
- 论文投稿指南——中文核心期刊推荐(计算机技术)
- 计算机基本基础知识实训总结,计算机基础实训总结范文
热门文章
- js参数使用时常犯的一个低级错误
- web服务器网站网速慢的原因,apache配置优化 - 解决apache环境下网站访问速度慢的问题...
- 安装后添加没有class library_Catalina的L/E Kext驱动安装方式
- python和java二选一该学啥_Python和Java二选一该学啥?
- antimalware service executable占用内存过高_Win10系统svchost.exe进程占用内存和网速过高的解决方法...
- java同名不同包文件_java – 如何从不同的JAR读取同名的几个资源文件?
- mac 黑窗口连接mysql_Mac系统Python、PyCharm安装及使用方法详解
- 设置Tomcat字符编码UTF-8
- linux下mysql的备份_Linux下MySQL的备份与还原
- java跨用问题怎么解决_跨浏览器问题的五种解决方案