之前一直以为C#中Lambda表达式和Where语法很神圣,看人家写出一串这样的代码出来都感觉好高深,其实只是不敢接触而已,然后今晚看了一下,仔细理解一下也很简单!看例子:
<code>01</code>
<code>using</code> <code>System;</code>
<code>02</code>
<code>using</code> <code>System.Collections.Generic;</code>
<code>03</code>
<code>using</code> <code>System.Linq;</code>
<code>04</code>
<code>05</code>
<code>06</code>
<code>07</code>
<code>namespace</code> <code>Lambda</code>
<code>08</code>
<code>{</code>
<code>09</code>
<code> </code><code>class</code> <code>Program</code>
<code>10</code>
<code> </code><code>{</code>
<code>11</code>
<code> </code><code>delegate</code> <code>int</code> <code>del(</code><code>int</code> <code>i);</code>
<code>12</code>
<code> </code><code>static</code> <code>void</code> <code>Main(</code><code>string</code><code>[] args)</code>
<code>13</code>
<code> </code><code>{</code>
<code>14</code>
<code> </code><code>List<</code><code>string</code><code>> fruits =</code>
<code>15</code>
<code> </code><code>new</code> <code>List<</code><code>string</code><code>> { </code><code>"apple"</code><code>, </code><code>"passionfruit"</code><code>, </code><code>"banana"</code><code>, </code><code>"mango"</code><code>,</code>
<code>16</code>
<code> </code><code>"orange"</code><code>, </code><code>"blueberry"</code><code>, </code><code>"grape"</code><code>, </code><code>"strawberry"</code> <code>};</code>
<code>17</code>
<code>18</code>
<code> </code><code>IEnumerable<</code><code>string</code><code>> query = fruits.Where(fruit => fruit.Length < 6); </code><code>//Where语法要引入Linq引用</code>
<code>19</code>
<code>20</code>
<code> </code><code>foreach</code> <code>(</code><code>string</code> <code>fruit </code><code>in</code> <code>query)</code>
<code>21</code>
<code> </code><code>{</code>
<code>22</code>
<code> </code><code>Console.WriteLine(fruit);</code>
<code>23</code>
<code> </code><code>}</code>
<code>24</code>
<code> </code><code>}</code>
<code>25</code>
<code>}</code>
运行效果图:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiInBnauMmZi5mYwNTZiJWaxxGNjZnMwczMwAzLcNjMvwVNwQTMwIzLc1WdixWYvwFduVWboNWY0RXYvwVY0FGZvwVbvNmLsFWduFWb5RXauVnL3d3dvw1LcpDc0RHaiojIsJye.jpg)
Where语法格式
<dl></dl>
<dt>TSource</dt>
<dt> source中元素的类型</dt>
<dt>source</dt>
<dt>predicate</dt>
用于测试每个元素是否满足条件的函数。
一般where都是跟Lambda表达式一起使用的,where语法包含在Linq命名空间下,那何为Lambda表达式呢,简单的说就是匿名函数,也跟匿名委托差不多,所以没必要想的很神圣。
Lambda表达式例子:
<code> </code><code>//声明委托类型</code>
<code> </code><code>//定义一个委托事件</code>
<code> </code><code>del myDelegate = x => x * 6;</code>
<code> </code><code>int</code> <code>j = myDelegate(5);</code>
<code> </code><code>Console.Write(j);</code>
<code> </code><code>Console.Read();</code>
<code> </code><code>}</code>
<code> </code><code>}</code>
运行结果是:30
估计很容易看明白。
Lambda表达式规则:
表达式位于=>运算符的右侧 (input parameters)=>expression
当Lambda只有一个输入参数的时候,括号才是可选的,否则括号是必须的。
例如:(x,y)=>x==y
有时候当编译器无法判断类型的时候,出现这种情况,你可以显式指定参数类型
例如:(int x,string y)=>s.length > x
当使用空括号表示指定0个参数
例如:()=>SomeMethod()
Lambda第二个小例子:
在介绍稍微复杂一点的Lambda表达式
上面声明的表达式,是以int类型作为参数,然后做一个比较,返回的是一个bool值。
如果参数是Expression<Func>时,你也可以提供Lambda表达式例如在 System.Linq.Queryable 内定义的标准查询运算符中。 如果指定 Expression<Func> 参数,lambda 将编译为表达式目录树。
计算出数组中基数的个数
再来个复杂点的例子,就是循环判断,知道不满足条件停止,类似于do while的结构
大体上先介绍到这儿,晚安!