之前一直以為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>
運作效果圖:

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的結構
大體上先介紹到這兒,晚安!