您的位置:首页 > 编程语言 > C#

[C#]Lambda表达式和Where语法

2014-05-23 01:14 281 查看
之前一直以为C#中Lambda表达式和Where语法很神圣,看人家写出一串这样的代码出来都感觉好高深,其实只是不敢接触而已,然后今晚看了一下,仔细理解一下也很简单!看例子:

csharpcode:

[code]01
using
System;
02
using
System.Collections.Generic;
03
using
System.Linq;
04
05
06
07
namespace
Lambda
08
{
09
class
Program
10
{
11
delegate
int
del(
int
i);
12
static
void
Main(
string
[] args)
13
{
14
List<
string
> fruits =
15
new
List<
string
> {
"apple"
,
"passionfruit"
,
"banana"
,
"mango"
,
16
"orange"
,
"blueberry"
,
"grape"
,
"strawberry"
};
17
18
IEnumerable<
string
> query = fruits.Where(fruit=> fruit.Length < 6);
//Where语法要引入Linq引用
19
20
foreach
(
string
fruit
in
query)
21
{
22
Console.WriteLine(fruit);
23
}
24
 
}
25
}
运行效果图:

Where语法格式public static IEnumerable<TSource> Where<TSource>(
this IEnumerable<TSource> source,
Func<TSource,bool> predicate
)

类型参数

TSource source中元素的类型

参数

source类型:System.Collections.Generic.IEnumerable<TSource>
要筛选的 IEnumerable<T>。
predicate类型:System.Func<TSource,Boolean>
用于测试每个元素是否满足条件的函数。一般where都是跟Lambda表达式一起使用的,where语法包含在Linq命名空间下,那何为Lambda表达式呢,简单的说就是匿名函数,也跟匿名委托差不多,所以没必要想的很神圣。Lambda表达式例子:

csharpcode:

[code]01
using
System;
02
03
namespace
Lambda
04
{
05
class
Program
06
{
07
//声明委托类型
08
delegate
int
del(
int
i);
09
static
void
Main(
string
[] args)
10
{
11
//定义一个委托事件
12
del myDelegate = x => x * 6;
13
int
j = myDelegate(5);
14
Console.Write(j);
15
16
Console.Read();
17
}
18
}
19
}
运行结果是:30估计很容易看明白。Lambda表达式规则:表达式位于=>运算符的右侧 (input parameters)=>expression当Lambda只有一个输入参数的时候,括号才是可选的,否则括号是必须的。例如:(x,y)=>x==y有时候当编译器无法判断类型的时候,出现这种情况,你可以显式指定参数类型例如:(int x,string y)=>s.length > x当使用空括号表示指定0个参数例如:()=>SomeMethod()Lambda第二个小例子:


其实理解了委托和事件就很容易理解这个Lambda,说白了就是匿名委托,再直白一点就是匿名函数。表示已经无法再直白的说下去了。
在介绍稍微复杂一点的Lambda表达式


上面声明的表达式,是以int类型作为参数,然后做一个比较,返回的是一个bool值。如果参数是Expression<Func>时,你也可以提供Lambda表达式例如在 System.Linq.Queryable 内定义的标准查询运算符中。 如果指定 Expression<Func> 参数,lambda 将编译为表达式目录树。此处显示了一个标准查询运算符,Count 方法:


计算出数组中基数的个数再来个复杂点的例子,就是循环判断,知道不满足条件停止,类似于do while的结构


大体上先介绍到这儿,晚安!我这里直接从我的论坛上复制古来的!我的蛮牛,欢迎关注我的围脖如需交流,请Q我吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: