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

简介: 之前一直以为C#中Lambda表达式和Where语法很神圣,看人家写出一串这样的代码出来都感觉好高深,其实只是不敢接触而已,然后今晚看了一下,仔细理解一下也很简单!看例子:[code]csharpcode:01using System;02using System.
之前一直以为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<TSourceBoolean>
用于测试每个元素是否满足条件的函数。

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


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

我这里直接从我的论坛上复制古来的!我的蛮牛,欢迎关注我的围脖如需交流,请Q我吧!


相关文章
|
3月前
|
开发框架 自然语言处理 .NET
C#一分钟浅谈:LINQ 查询表达式的使用技巧
【9月更文挑战第6天】LINQ(Language Integrated Query)是C#开发中的强大工具,使查询数据集合变得简单且接近自然语言。本文从基础入手,通过具体示例讲解LINQ查询表达式的使用技巧,包括过滤、排序和分组等操作。同时,文章还探讨了常见问题及解决方法,如性能优化、过早枚举和类型转换等,帮助开发者写出更高效、易维护的代码。
102 15
|
3月前
|
C#
C#一分钟浅谈:Lambda 表达式和匿名方法
本文详细介绍了C#编程中的Lambda表达式与匿名方法,两者均可用于定义无名函数,使代码更简洁易维护。文章通过基础概念讲解和示例对比,展示了各自语法特点,如Lambda表达式的`(parameters) =&gt; expression`形式及匿名方法的`delegate(parameters)`结构。并通过实例演示了两者的应用差异,强调了在使用Lambda时应注意闭包问题及其解决策略,推荐优先使用Lambda表达式以增强代码可读性。
48 8
|
7月前
|
C#
C#的基本语法结构学习
【5月更文挑战第17天】C#基础语法包括变量(如`int x = 10`)、常量(`const int MAX_VALUE = 100`)、运算符(如算术和比较运算符)、控制语句(if、for、while等)和函数声明(`int Add(int x, int y) { return x + y; }`)。这些构成C#程序的基本元素。
79 0
|
7月前
|
开发框架 .NET C#
C#学习相关系列之Linq用法---where和select用法(二)
C#学习相关系列之Linq用法---where和select用法(二)
402 2
|
5月前
|
SQL 开发框架 前端开发
在C#开发中使用第三方组件LambdaParser、DynamicExpresso、Z.Expressions,实现动态解析/求值字符串表达式
在C#开发中使用第三方组件LambdaParser、DynamicExpresso、Z.Expressions,实现动态解析/求值字符串表达式
|
4月前
|
存储 C# 索引
C# 集合语法全解
C# 集合语法全解
33 0
|
7月前
|
C#
C#动态查询:巧用Expression组合多条件表达式
在C#中,利用`Expression`类和`AndAlso`、`OrElse`方法,可以组合两个`Expression&lt;Func&lt;T, bool&gt;&gt;`以实现动态多条件查询。该方法通过构建表达式树,方便地构建复杂查询。示例代码展示了如何创建表达式树,分别检查年龄大于等于18和姓名为&quot;John&quot;的条件,并使用`AndAlso`组合这两个条件,最终编译为可执行的委托进行测试。
286 1
|
7月前
|
SQL 开发框架 .NET
C#linq表达式的应用
C#linq表达式的应用
41 0
|
7月前
|
C#
C#语法快速热身
C#语法快速热身
|
1月前
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
33 3