Lambda与委托
Lambda 表达式是一个可用于创建委托或表达式树类型的匿名函数。
通过使用 lambda 表达式,可以可作为参数 或 返回为函数调用值的本地函数。Lambda 表达式对于编写 LINQ 查询表达式特别有用。
若要创建 Lambda 表达式,必须在 Lambda 运算符 =>(读作goes to) 左侧指定输入参数(如果有),然后在另一侧输入表达式或语句块。
例如,
lambda 表达式 x => x * x
指定名为 x 的参数并返回 x 的平方。
您可以按照以下示例将此表达式分配给委托类型:
namespace Lambda
{
class Program
{
delegate int del(int intput);
static void Main(string[] args)
{
del myDelegate = x => (x * x);
Console.WriteLine(myDelegate());//
}
}
}
Lambda 表达式
表达式在右边的 Lambda 表达式称为“Lambda 表达式”。 Lambda 表达式返回表达式的结果,并采用以下基本形式:
(input parameters) => expression
注:只有在 Lambda 有一个输入参数时,括号才是可选的;否则括号是必需的。
两个或更多输入参数由括在括号中的逗号分隔:
(x, y) => x == y
有时,编译器难于或无法推断输入类型。如果出现这种情况,您可以按以下示例中所示方式显式指定类型:
(int x, string s) => s.Length > x
使用空括号指定零个输入参数:
() => SomeMethod()
Lambda 语句
Lambda 语句与 Lambda 表达式类似,只是语句括在大括号中:
(input parameters) => {statement;}
class Program
{
delegate void TestDelegate(string s);
static void Main(string[] args)
{
TestDelegate myDel = n =>
{
string s = n + "....";
Console.WriteLine(s);
};
myDel("Ca!");
}
}
1. 完整的委托
namespace Lambda
{
class Program
{
delegate string Del(string name); static string sayHi(string name)
{
return "Hi " + name;
}
static void Main(string[] args)
{
Del say = new Del(sayHi);
Console.WriteLine(sayHi("完整委托"));
}
}
}
2.升级版本--匿名方法
namespace Lambda
{
class Program
{
delegate string Del(string name);
static void Main(string[] args)
{
Del sayHi = delegate(string name) { return "Hi " + name; };
Console.WriteLine(sayHi("匿名方法"));
}
}
}
3.升级版本Lambda表达式
namespace Lambda
{
class Program
{
delegate string Del(string name);
static void Main(string[] args)
{
Del sayHi = name => { return "Hi " + name; };
Console.WriteLine(sayHi("Lambda表达式"));
}
}
}
4.委托替代--Func 委托 有参数有返回值
namespace Lambda
{
class Program
{
static void Main(string[] args)
{
Func<string, string> sayHi = delegate(string name) { return "Hi " + name; };
Func<string, string> SayHi = name => { return "Hi " + name; };
Console.WriteLine(sayHi(" Func<string, string>匿名委托"));
Console.WriteLine(SayHi(" Func<string, string>Lambda委托"));
}
}
}
5.委托替代--Action 委托 有参数无返回值
namespace Lambda
{
class Program
{
static void Main(string[] args)
{
Action<string> sayHi = delegate(string name)
{
Console.WriteLine("Hi " + name);
};
Action<string> SayHi = name => Console.WriteLine("Hi " + name);
sayHi("Action<string> sayHi匿名委托");
SayHi("Action<string> SayHi Lambda委托");
}
}
}
参考:
用五分钟重温委托,匿名方法,Lambda,泛型委托,表达式树
Lambda与委托的更多相关文章
- lambda和委托
Lambda 简介 Lambda 表达式是一种可用于创建委托或表达式目录树类型的一种匿名函数(匿名方法+Lambda).通过使用 lambda 表达式,可以写入可作为参数传递或作为函数 调用值返回的本 ...
- lambda和委托那点事
Lambda 简介 Lambda 表达式是一种可用于创建委托或表达式目录树类型的一种匿名函数(匿名方法+Lambda).通过使用 lambda 表达式,可以写入可作为参数传递或作为函数 调用值返回的本 ...
- C#利用lambda实现委托事件的挂接
转自:http://www.cdtarena.com/cpx/201307/9287.html在写一个小程序的时候,碰到了这样的问题,需要用委托来挂接事件,但是又想在这事件中使用局部的变量,而委托一旦 ...
- LINQ、Lambda与委托
首先定义个Person类: public class Person { public string Name{get;set;} //姓名 public int Age{get;set;} //年龄 ...
- C#中匿名函数、委托delegate和Action、Func、Expression、还有Lambda的关系和区别
以前一直迷迷糊糊的,现在总算搞明白. Lambda表达式 Lamda表达式基本写法是()=>{ };Lambda和方法一样都可以传入参数和拥有返回值.(int x)=>{return x; ...
- C# 委托 (一)—— 委托、 泛型委托与Lambda表达式
C# 委托 (一)—— 委托. 泛型委托与Lambda表达式 2018年08月19日 20:46:47 wnvalentin 阅读数 2992 版权声明:此文乃博主之原创.鄙人才疏,望大侠斧正.此 ...
- 基础知识---委托和 lambda
委托定义类型,类型指定特定方法签名. 可将满足此签名的方法(静态或实例)分配给该类型的变量,然后(使用适当参数)直接调用该方法,或将其作为参数本身传递给另一方法再进行调用. 以下示例演示了委托的用法. ...
- ASP.NET MVC学前篇之Lambda表达式、依赖倒置
ASP.NET MVC学前篇之Lambda表达式.依赖倒置 前言 随着上篇文章的阅读,可能有的朋友会有疑问,比如(A.Method(xxx=>xx>yy);)类似于这样的函数调用语句,里面 ...
- C#中委托演变的的三个阶段
命名函数 匿名方法 lambda表达式 委托是一种可以把引用存储为函数的类型,定义了委托后,就可以声明该委托类型的变量,接着把这个变量初始化为与委托有相同返回类型和参数列表的函数引用,之后就可以使用委 ...
随机推荐
- CCF CSP 201703-5 引水入城(50分)
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201703-5 引水入城 问题描述 MF城建立在一片高原上.由于城市唯一的水源是位于河谷地带的 ...
- rabbitmq学习(二) —— helloword!
rabbitmq学习当然是跟着官网走最好了,官网的教程写的很好,跟着官网教程走一遍就会有个初步了解了 下面的教程转自http://cmsblogs.com/?p=2768,该博客对官网的翻译还不错 介 ...
- JAVAEE——宜立方商城11:sso登录注册功能实现、通过token获得用户信息、Ajax跨域请求(jsonp)
1. 学习计划 第十一天: 1.sso注册功能实现 2.sso登录功能实现 3.通过token获得用户信息 4.Ajax跨域请求(jsonp) 2. Sso系统工程搭建 需要创建一个sso服务工程,可 ...
- load Properties
/* */ public static final Properties loadProperties(String propertyFileRelativePath) /* */ { /* 67 * ...
- 【SQL】183. Customers Who Never Order
Suppose that a website contains two tables, the Customers table and the Orders table. Write a SQL qu ...
- Revit二次开发示例:AutoStamp
该示例中,在Revit启动时添加打印事件,在打印时向模型添加水印,打印完成后删除该水印. #region Namespaces using System; using System.Collect ...
- JS (function (window, document, undefined) {})(window, document)的真正含义
原文地址:What (function (window, document, undefined) {})(window, document); really means 按原文翻译 在这篇文章中,我 ...
- win7 64位安装pywin32
先安装pywin32-218.win-amd64-py3.4.exe文件: 安装完成后,用CMD管理员模式进入\Python34\Scripts\目录 输入pywin32_postinstall.py ...
- Codeforces Round #353 (Div. 2) D. Tree Construction 模拟
D. Tree Construction 题目连接: http://www.codeforces.com/contest/675/problem/D Description During the pr ...
- Codeforces Round #298 (Div. 2) B. Covered Path 物理题/暴力枚举
B. Covered Path Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/534/probl ...