我們常常會使用C#中的foreach函數,對集合中的每個目標進行操作。但是,其實也可以使用LINQ搭配List的ForEach方法和Lambda陳述式來完成這個工作,會讓程式更加的簡潔許多。
先來看看下面的範例(雖然這次的範例用Silvelright實作,但是其實主題是C#,用Silvelright只是為了方便Demo):
先來看看上面範例的XAML檔,為了展現LINQ的威力,我就不一一替每個控制項命名了(其實是自己懶):
通常像上面這樣的例子,如果我們想檢查使用者介面中的每個文字輸入欄位是不是都有輸入值,並且在輸入的值是空白的時候更改文字輸入欄位的長相的話,一般應該常常會使用C#中的foreach函數,對每個目標進行操作。但是,其實也可以使用LINQ搭配List<T>的ForEach方法和Lambda陳述式來完成這個工作,會讓程式更加的簡潔許多。
然而,若使用LINQ來取得集合,預設回傳的類別會是IEnumerable<T>,而偏偏又那麼剛好,IEnumerable<T>並沒有內建ForEach方法,所以為了折衷使用,我們只得把LINQ回傳的型別轉為List<T>,再藉助它的ForEach方法來完成我們的工作。所幸,我們還有ExtensionMethod啊~~只要用ExtensionMethod幫IEnumerable<T>也加上ForEach方法就搞定啦!!
來看看藉助以上提到的語法,程式可以怎麼寫:
以上,好不好用就見仁見智囉!!跟大家分享,有興趣的人也可以試著這樣寫看看喔~
最後一樣附上原始碼,請自行服用: