Lambda表达式学习(2)
在. net3. 5里面 , 委托的定义和实现被大大的简化了!使用关键字Func或Action就可以定义一个委托 , 使用拉姆达表达式就可以实现一个具体的委托.
Func关键字是用来定义一个有返回值的委托 , 它一共有五个重载 , 我们介绍其中的三个
1 public delegate TResult Func<TResult>();
这表示一个没有参数 , 只有一个返回值的委托 , 返回值的类型就是TResult(泛型)
代码
public class test
{
/// <summary>
/// 定义一个委托
/// </summary>
public Func<string> _GetName;
/// <summary>
/// 一个普通的没有参数 , 有返回值的方法
/// </summary>
/// <returns></returns>
public string GetName()
{
return "张三";
}
public void Main()
{
//3. 5以前的委托的实现 , 直接赋值
_GetName = GetName; //拉姆达表达式的实现方法
_GetName = (
() //因为这个委托没参数 , 所以参数列表没有东西
= > //拉姆达表达式的符号
{ //大括号的代码段表示具体的委托的实现
return "还是张三";
});
//拉姆达表达式的简写 , 如果委托的实现代码段中只有一句return 则可以省略代码段最外面的大括号 , 和return关键字
_GetName = () = > "总是张三";
//调用
string MyName = _GetName();
}
}
2 public delegate TResult Func<T , TResult>(T arg);
这表示有且仅有一个参数 , 并且有返回值的委托.
代码
public class test
{
/// <summary>
/// 定义一个委托 , 有一个参数和一个返回值
/// </summary>
public Func<string , string> _GetName;
/// <summary>
/// 有一个参数的方法
/// </summary>
/// <param name = "strName">这是一个参数!</param>
/// <returns>这是一个返回值</returns>
public string GetName(string strName)
{
return strName;
}
public void Main()
{
//3. 5以前的委托的实现 , 直接赋值
_GetName = GetName; //拉姆达表达式的实现方法
_GetName = (
(S) //有一个参数!所以参数列表里面有一个东西 , 这个东西随大家高兴叫个阿猫阿狗都行!只要符合规范
= > //拉姆达表达式的符号
{ //大括号的代码段表示具体的委托的实现
return "还是" + S;
});
//拉姆达表达式的简写 , 如果委托的实现代码段中只有一句return 则可以省略代码段最外面的大括号 , 和return关键字
_GetName = (abc) = > "总是" + abc;
//调用
string MyName = _GetName("张三");
}
}
3 public delegate TResult Func<T1 , T2 , TResult>(T1 arg1 , T2 arg2);
这表示有且仅有两个参数 , 并且有返回值的委托.
代码
public class test
{
/// <summary>
/// 定义一个委托 , 有一个参数和一个返回值
/// </summary>
public Func<string , int , string> _GetName;
/// <summary>
/// 这是一个有两个参数的方法 , 方法的参数类型的顺序必须和委托的参数类型顺序一致
/// </summary>
/// <param name = "strName">第一个是字符类型</param>
/// <param name = "intAGE">第二个是整形 , 请不要颠倒类型!</param>
/// <returns>返回一个字符串 , 对应委托的最后一个参数</returns>
public string GetName(string strName , int intAGE)
{
return string. Format("{0}的年龄是{1}岁" , strName , intAGE);
}
public void Main()
{
//3. 5以前的委托的实现 , 直接赋值
_GetName = GetName; //拉姆达表达式的实现方法
_GetName = (
(S , W) //有一个参数!所以参数列表里面有一个东西 , 这个东西随大家高兴叫个阿猫阿狗都行!只要符合规范
= > //拉姆达表达式的符号
{ //大括号的代码段表示具体的委托的实现
return string. Format("{0}的年龄是{1}岁" , S , W);
});
//拉姆达表达式的简写 , 如果委托的实现代码段中只有一句return 则可以省略代码段最外面的大括号 , 和return关键字
_GetName = (abc , efd) = > string. Format("{0}的年龄是{1}岁" , abc , efd);
//调用
string MyName = _GetName("张三" , );
}
}
Action关键字用来定义一个没有返回值的方法 , 它有一个非泛型方法 , 和四个泛型方法 , 一共五种. Action和func的区别就在于一个没有返回值 , 一个有返回值!其他的都一样!就好像VB的sub和function一样!
1 public delegate void Action();没有参数也没有返回值
代码
public class test
{
/// <summary>
/// 定义一个委托 , 没有返回值也没有参数
/// </summary>
public Action _GetName; public void GetName()
{
System. Windows. Forms. MessageBox. Show("没有参数也没有返回值 , 我只要自己显示了!");
}
public void Main()
{
//3. 5以前的委托的实现 , 直接赋值
_GetName = GetName; //拉姆达表达式的实现方法
_GetName = (
()
= > //拉姆达表达式的符号
{ //大括号的代码段表示具体的委托的实现
System. Windows. Forms. MessageBox. Show("没有参数也没有返回值 , 我只要自己显示了!");
});
//因为action没有返回值 , 所以下面的简写方式是错误的
//_GetName = () = > System. Windows. Forms. MessageBox. Show("没有参数也没有返回值 , 我只要自己显示了!");
//调用
_GetName();
}
}
2 public delegate void Action<T>(T obj);
代码
public class test
{
/// <summary>
/// 定义一个委托 , 没有返回值也没有参数
/// </summary>
public Action<bool> _GetName; public void GetName(bool blnShow)
{
if (blnShow)
{
System. Windows. Forms. MessageBox. Show("要我显示就显示 , 多没面子");
}
else
{
System. Windows. Forms. MessageBox. Show("不要我显示 , 我偏要显示");
}
}
public void Main()
{
//3. 5以前的委托的实现 , 直接赋值
_GetName = GetName; //拉姆达表达式的实现方法
_GetName = (
(b)
= > //拉姆达表达式的符号
{ //大括号的代码段表示具体的委托的实现
if (b)
{
System. Windows. Forms. MessageBox. Show("要我显示就显示 , 多没面子");
}
else
{
System. Windows. Forms. MessageBox. Show("不要我显示 , 我偏要显示");
}
}); _GetName(true);
}
}
有一个参数但没有返回值
Lambda表达式学习(2)的更多相关文章
- C# Lambda 表达式学习之(三):动态构建类似于 c => c.Age == null || c.Age > 18 的表达式
可能你还感兴趣: 1. C# Lambda 表达式学习之(一):得到一个类的字段(Field)或属性(Property)名,强类型得到 2. C# Lambda 表达式学习之(二):LambdaExp ...
- C# Lambda 表达式学习之(四):动态构建类似于 c => c.Age == 2 || c.Age == 5 || c => c.Age == 17 等等一个或多个 OrElse 的表达式
可能你还感兴趣: 1. C# Lambda 表达式学习之(一):得到一个类的字段(Field)或属性(Property)名,强类型得到 2. C# Lambda 表达式学习之(二):LambdaExp ...
- java lambda表达式学习笔记
lambda是函数式编程(FP,functional program),在java8中引入,而C#很早之前就有了.在java中lambda表达式是'->',在C#中是‘=>’. 杜甫说:射 ...
- java 8 中lambda表达式学习
转自 http://blog.csdn.net/renfufei/article/details/24600507 http://www.jdon.com/idea/java/10-example-o ...
- C# Lambda表达式学习笔记
本笔记摘抄自:https://www.cnblogs.com/leslies2/archive/2012/03/22/2389318.html,记录一下学习过程以备后续查用. 一.Lambda ...
- Lambda 表达式 学习
最近几天在学习Lambda,给我的理解就是一个匿名函数的升级版,代码极大可能的简洁了很多,不需要像以前一样必须使用众多的代码才能实现相关功能. 慢慢积累学习,将Java 8的相关知识进行一个学习. 用 ...
- Python中lambda表达式学习
lambda只是一个表达式,函数体比def简单很多. lambda的主体是一个表达式,而不是一个代码块.仅仅能在lambda表达式中封装有限的逻辑进去. lambda表达式是起到一个函数速写的作用.允 ...
- C#Lambda表达式学习日记
Lambda表达式只是用更简单的方式来写匿名方法,彻底简化了对.NET委托类型的使用. 现在,如果我们要使用泛型 List<> 的 FindAll() 方法,当你从一个集合去提取子集时,可 ...
- C++11 lambda表达式学习
lambda表达式是函数式编程的基础.咱对于函数式编程也没有足够的理解,因此这里不敢胡言乱语,有兴趣的可以自己查找相关资料看下.这里只是介绍C++11中的lambda表达式自己的认识.这里有参考文档h ...
- python第l六天,lambda表达式学习,涉及filter及Map。
在python中lambda表达式可以作为匿名函数来使用,举一个简单的栗子: 以前我们写两个数相加的函数需要 #以前我们写两个数相加的函数,需要这样写 >>> def sum(x,y ...
随机推荐
- WCF使用net.tcp绑定的配置实例
<system.serviceModel> <bindings> <basicHttpBinding> <!--默认http绑定的配置,这里提高了最大传输信息 ...
- SSH下shiro的基本使用
1.引入依赖 <!-- 权限控制 框架 --> <dependency> <groupId>org.apache.shiro</groupId> ...
- Vue 2.0 pagination分页组件
最近写了一个分页组件,效果如下图: f-pagination.js文件 Vue.component('f-pagination',{ template:'<div class="fPa ...
- angular2 如何使用websocket
1.npm下载: npm install angular2-websocket 2.需要在哪个组件使用就在那里引入: import {$WebSocket} from 'angular2-websoc ...
- Asp.net MVC 移除不用的视图引擎
Asp.net MVC 默认提供两个视图引擎,分别为: WebFormViewEngine 和 RazorViewEngine.MVC在查找视图时,会按照指定的顺序进行查找.当我们的MVC程序未找到相 ...
- 将ArcGIS Server的JSON转化为SHP文件
# -*- coding: utf-8 -*- # -------------------------------------------------------------------------- ...
- python实现字符串中的半全角转换
全角和半角的空格的Unicode值相差12256 除空格外的全角和半角的Unicode值相差65248 # -*- coding: utf-8 -*- def strQ2B(ustring): &qu ...
- Swiper-轮播图。
Swiper(Swiper master)是目前应用较广泛的移动端网页触摸内容滑动js插件,可以用来做轮播和滑动. 初始化 <!DOCTYPE html> <html> < ...
- Asp.net mvc Kendo UI Grid的使用(三)
上一篇的操作已经能够显示基本数据了,这次介绍一下如何进行数据操作以及显现自定义命令. 第一步当然还是准备数据: [HttpPost] public ActionResult PersonalList_ ...
- windows zend_guard+apache no ssl+php no Thread Safe fastcgi模式 环境配置
最近公司要做代码加密,就采用ZEND GUARD 方式加密代码 并进行显示 此文为总结,以备自己以后查看和给需要的同学们参考 采用的php为5.3版本 由于现在加密的更改, 能支持zend guar ...