糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > C# 匿名委托 匿名方法 匿名对象 Lambda表达式

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

时间:2021-12-26 04:12:07

相关推荐

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

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

一、匿名类型

可通过使用 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//多参数,隐式类型=> 表达式

posted on -04-19 14:49 NET未来之路 阅读(...) 评论(...) 编辑 收藏

如果觉得《C# 匿名委托 匿名方法 匿名对象 Lambda表达式》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。