C# 匿名委托、匿名方法、匿名对象、Lambda表达式

摘要:
“);};}将委托与匿名方法delegatevoidDEL;privatevoidWindow_Loaded{DELp=委托{System.Console.WriteLine;}相关联;p、 }3、 Func,Func是一个返回值为Func<int>的泛型委托,表示没有参数,Func<object,string,int>表示传入的参数是object,Func>object,string、int>表示传递的参数是object,Func=object、string、int<表示传入的参数是object,Func至少有0个参数,最多有16个参数由int返回,基于返回值泛型返回。

一、匿名类型
可通过使用 new 运算符和对象初始值创建匿名类型。
示例:
var v = new { Name = "Micro", Message = "Hello" };
var v = new[] {
new { Name = "Micro", Message = "Hello" },
new { Name = "Soft", Message = "Wold!" }
};
匿名类型通常用在查询表达式的 select 子句中,以便返回源序列中每个对象的属性子集。
var Query = from p in v select new { p.Name };
foreach (var o in Query)
{
Console.WriteLine(o.Name);
}
可以查找对象
IEnumerable<v> results = people.Where(delegate(v p) { return p.Name == "Micro"; });
二、匿名方法
要将代码块传递为委托参数 例如:
点击事件
button1.Click += delegate(System.Object o, System.EventArgs e)
{
System.Console.WriteLine("Hello");
};
this.Loaded += delegate
{
InitializeEvent();
};
加载事件
this.Loaded += (sl, el) =>
{
System.Console.WriteLine("Hello");
this.button1.Click += (sender, e) =>
{
System.Console.WriteLine("Wold!");
}
}
匿名方法与线程
System.Threading.Thread thread = new System.Threading.Thread(delegate(j)
{
System.Console.WriteLine("Hello");
});
thread.Start();
System.Threading.ThreadPool.QueueUserWorkItem((s) =>
{
Action f = () =>
{
System.Console.WriteLine("Wold!");
};
}
使委托与匿名方法关联
delegate void DEL(string s);
private void Window_Loaded(object sender, RoutedEventArgs e)
{
DEL p = delegate(string j)
{
System.Console.WriteLine(j);
};
p("Hello");
}
三、Func,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
匿名方法只能在使用委托的时候创建,事实上,它们通过delegate关键字创建。
使用示例:
var func = new Func<bool, int>(delegate(bool x) { return x ? 10 : 5; });
int ret = func(true);
四、匿名事件
btn.Click += delegate(object o, EventArgs e) { };
五、Lambda 表达式,Func<T>委托
MSDN中写道:“Lambda 表达式”是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式树类型。
所有Lambda表达式都使用Lambda运算符=>
左边是输入参数列表
1.一个参数:param=>expr
2.多个参数:(param-list)=>expr
右边是表达式或语句块
(参数列表)=>表达式或语句块
合法的Lambda表达式
1、(x, y) => x * y //多参数,隐式类型=> 表达式
2、x => x * 5 //单参数, 隐式类型=>表达式
3、x => { return x * 5; } //单参数,隐式类型=>语句块
4、(int x) => x * 5 //单参数,显式类型=>表达式
5、(int x) => { return x * 5; } //单参数,显式类型=>语句块
6、() => Console.WriteLine() //无参数
在编写Lambda表达式时,可以忽略参数的类型,因为编译器能够根据上下文直接推断参数的类型,示例代码如下。
(x, y) => x + y //多参数,隐式类型=> 表达式

免责声明:文章转载自《C# 匿名委托、匿名方法、匿名对象、Lambda表达式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇4、zabbix基本配置入门[转]JAVA读取外部资源的方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

c# lambda distinct

在写程序的时候会遇见这样的问题,那就是去重,有什么方法更快呢。当去重时,首先想到的是自己写代码,代码大概如下: private static void distinctListIntTest() { Console.WriteLine("未去重"); List<int> li...

selenium模拟鼠标操作

Selenium提供了一个类ActionChains来处理模拟鼠标事件,如单击、双击、拖动等。 基本语法: class ActionChains(object): """ ActionChains are a way to automate low level interactions such as mouse movements...

Java 8:掌握 Lambda 表达式

本文将介绍 Java 8 新增的 Lambda 表达式,包括 Lambda 表达式的常见用法以及方法引用的用法,并对 Lambda 表达式的原理进行分析,最后对 Lambda 表达式的优缺点进行一个总结。 ​ 1. 概述 Java 8 引入的 Lambda 表达式的主要作用就是简化部分匿名内部类的写法。 能够使用 Lambda 表达式的一个重要依据是必须...

java函数式编程

1.函数式接口 1.1概念:java中有且只有一个抽象方法的接口。 1.2格式: 修饰符 interface接口名称 { public abstract返回值类型 方法名称(可选参数信息); //其他非抽象方法内容 } //或者 public interfaceMyFunctionalInterface { voidmyMethod(); }...

GUI学习之二十四——QDialog学习总结

今天学习对话框输入控件的基类(QDialog)。 一.描述 是对话类窗口(字体框、颜色选择、文件选择框等)的基类。 对话框窗口是顶级窗口(就是说不包含于哪个父类的显示界面里),主要用于短期任务和与用户的短期通信。 QDialogs是可以有返回值的(字体、颜色等),有默认按钮(确认、取消和关闭)。 二.对话框的种类   对话框可以是模态或非模态的对话框   ...

Python进阶07 函数对象【转】

秉承着一切皆对象的理念,我们再次回头来看函数(function)这一结构。函数实际上也是一个对象。既然是一个对象,它也具有属性(可以使用dir()查询)。作为对象,它还可以赋值给其它变量名,或者作为参数传递给其它函数使用。 1. lambda在展开之前,我们先提一下lambda。lambda是一种简便的,在同一行中定义函数的方法,其功能可以完全由def定...