List18 循環內判定的情況
然而,如果使用Lambda表達式,就會有一種完全不同的答案。要判斷所有數組的元素是否都滿足一定的條件,只需用一個調用一個方法的Lambda表達式,事情就有著落了。在不損失可讀性的范圍內,把Lambda表達式寫進if語句的條件中就能輕松的實現了。
實際寫出來的例子如下。Any方法是,集合的元素中只要含有一個滿足參數的Lambda表達式的元素就返回true。這個用到了.Net Framework的擴展方法,為了能夠使用,要在代碼前面加上“using System.Linq;”。
1using System;
2using System.Linq; // 為了使用Any方法
3
4class Program
5{
6 static void Main(string[] args)
7 {
8 int[] a = { 1, 2, 0 };
9
10 if (a.Any(x => x == 0))
11 {
12 Console.WriteLine("數組中含有0");
13 return;
14 }
15 foreach (int n in a) Console.WriteLine(100 / n);
16 }
17 // 輸出:數組中含有0。
18}
19
List19 使用Lambda表達式在計算之前就檢驗0值
如果是不能使用.Net Framework 3.5的場合,List19的if語句就要寫成下面的形式(稍稍有些冗長),這樣在.Net Framework 2.0下也同樣能夠使用。
if (Array.FindIndex(a, x => x == 0) >= 0)
這個例子,用Lambda表達式對集合數據的處理,感覺就像對單個值進行判斷的“if ( n == 0 )”一樣,對集合使用“if (a.Any(x => x == 0))”就能夠處理。
總之吧,使用循環的方法對集合元素進行判斷處理的方法,用僅僅一句if就能給替換了。如果經常使用這種技術,代碼的結構也會更明快簡潔。
【短評】“=>”是不等號?
BASIC系的語言中,不等號的寫法,“=”與“>”的順序沒有明確的規定。這樣的語言中,“>=”“=>”是等價的。正因為如此,熟悉了這樣的語言的話“=>運算符”就很容易會被誤認為是不等號。
例如如果有下面的Lambda表達式,如果是有上述語言的使用經驗的人看來,很容易就認為是不等號了。
x => 0
但是,使用Visual Basic的IDE的程序員,幾乎就不會看見作為不等號的“=>”。因為在IDE中輸入“=>”時,當場就會被自動替換為“>=”(Visual Basic 6.0與Visual Studio 2008會要求確認)
所以綜合起來考慮,如果是使用會把“=>”與不等號搞混的編程語言,那最好就要養成良好的編程習慣。