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

之前一直以为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的结构

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

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

时间: 2024-08-03 07:53:08

[C#]Lambda表达式和Where语法的相关文章

Java8初体验(一)lambda表达式语法

感谢同事[天锦]的投稿.投稿请联系 tengfei@ifeve.com 本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人也是刚刚开始学习Java8,所以文中肯定有错误和理解偏差的地方,希望大家帮忙指出,我会持续修改和优化.本文是该系列的第一篇,主要介绍Java8对屌丝码农最有吸引力的一个特性-lambda表达式. java8的安装 工欲善其器必先利其器,首先安装JDK8.过程省略,大家应该都可以自己搞定.但是有一点这里强调一下(Windows系统):目前我们工作的版本

C++11中的Lambda表达式

"Lambda 表达式"(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数.Lambda表达式可以表示闭包(注意和数学传统意义上的不同). ISO C++ 11 标准的一大亮点是引入Lambda表达式.基本语法如下: [capture list] (parameter list) ->return type { function

函数式接口、默认方法、纯函数、函数的副作用、高阶函数、可变的和不可变的、函数式编程和 Lambda 表达式 - 响应式编程 [Android RxJava2](这到底是什么)第三部分

本文讲的是函数式接口.默认方法.纯函数.函数的副作用.高阶函数.可变的和不可变的.函数式编程和 Lambda 表达式 - 响应式编程 [Android RxJava2](这到底是什么)第三部分, 太棒了,我们又来到新的一天.这一次,我们要学一些新的东西让今天变得有意思起来. 大家好,希望你们都过得不错.这是我们的 RxJava2 Android 系列的第三篇文章. 第一部分 第二部分 在这篇文章中,我们将讨论函数式的接口,函数式编程,Lambda 表达式以及与 Java 8 的相关的其它内容.这

C++11 lambda表达式(19篇C++11文章)

C++11引入了lambda表达式,使得程序员可以定义匿名函数,该函数是一次性执行的,既方便了编程,又能防止别人的访问. Lambda表达式的语法通过下图来介绍:            这里假设我们定义了一个如上图的lambda表达式.现在来介绍途中标有编号的各个部分是什么意思. Lambda表达式的引入标志,在'[]'里面可以填入'='或'&'表示该lambda表达式"捕获"(lambda表达式在一定的scope可以访问的数据)的数据时以什么方式捕获的,'&'表示一引

匿名方法,Lambda表达式,高阶函数

原文:匿名方法,Lambda表达式,高阶函数 匿名方法 c#2.0引入匿名方法,不必创建单独的方法,因此减少了所需的编码系统开销. 常用于将委托和匿名方法关联,例如 1. 使用委托和方法关联: this.btnRefresh.Click += new System.EventHandler(this.btnRefresh_Click);private void btnRefresh_Click(object sender, EventArgs e){    BindData();} 2. 使用委

Lambda表达式和linq普通语法的一些对比

  linq普通语法 return (from p in dc.TeacherBasicInformation where p.TeacherNum == num select p.PhotoSrc).FirstOrDefault();             Lambda表达式 return dc.TeacherBasicInformation.Where(p => p.TeacherNum == num).Select(p => p.PhotoSrc).FirstOrDefault();

java中lambda表达式语法说明_java

语法说明 一个lambda表达式由如下几个部分组成: 1. 在圆括号中以逗号分隔的形参列表.在CheckPerson.test方法中包含一个参数p,代表了一个Person类的实例.注意:lambda表达式中的参数的类型是可以省略的:此外,如果只有一个参数的话连括号也是可以省略的.比如上一节曾提到的代码: p -> p.getGender() == Person.Sex.MALE && p.getAge() >= 18 && p.getAge() <= 25

Lambda 表达式语法

本主题介绍 lambda 表达式的语法. 它演示提供 lambda 表达式的结构元素的示例,这些元素与示例. Lambda 表达式语法 下面用于定义显示语法,ISO C++11 从标准,lambda 表达式 (项标记下标 选择 是可选的):          lambda-introducer lambda-declarator 选择 compound-statement 进一步失败的组件这些语法如下: lambda-introducer:          [ lambda-capture 选

Kotlin语法(函数和lambda表达式)

三.函数和lambda表达式 1. 函数声明 fun double(x: Int): Int { } 函数参数是用 Pascal 符号定义的 name:type.参数之间用逗号隔开,每个参数必须指明类型.函数参数可以有默认参数.这样相比其他语言可以减少重载. fun read(b: Array<Byte>, off: Int = 0, len: Int = b.size() ) { ... } 2. 命名参数 在调用函数时可以参数可以命名.这对于有很多参数或只有一个的函数来说很方便. fun