• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

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

武飞扬头像
蓬莱仙羽
帮助1

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

看例子:

[code]csharpcode:

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表达式例子:

[code]csharpcode:

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的结构

学新通

大体上先介绍到这儿,晚安!

我这里直接从我的论坛上复制古来的!我的蛮牛,欢迎关注我的围脖

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhibghgi
系列文章
更多 icon
同类精品
更多 icon
继续加载