2013年5月31日 星期五

一秒看破 LINQ & Lambda Expressions

最近有人問我 令Q 跟 浪打 到底是在玩什麼花招的? 可以吃嗎? 非用不可?

我就在此稍微回答一下

1.令Q 跟 浪打 都可以用來對付 [可列舉型態型別的查詢] 浪打花招更多一點點 還能用來建立 委派 跟 註冊事件

2.可以吃唷 前者有點 QQ 的 後者 有點辣辣的

3.就民主立場而言 沒有非用不可 跟你有沒有非要 非死不可 差不多

 但是專制獨裁的微軟要推他就會使出各種陰謀稱作技術主流





如果這張圖你很懂在幹嘛 你可以關閉這個網頁 試著啟動 OO聯盟

影像節錄自 跟著 Wade 哥哥 學習ASP.NET MVC + NHibernate - Day 5 16:43



如果 你覺得 花惹發科 就繼續看下去

其實上圖跟等下的內容沒有關係 呵呵 但是證明了 微軟會無所不用其極的在任何地方使用他





首先 非關DB 非關Query List 的 方法

如果你不認識 泛型先生 跟 委派小姐 的話 請拜估狗大神

生死格鬥之浪打委派 第一彈 List Sort()、Find()、FindAll()、Exist() 豬走路範例
public void Sort(Comparison<T> comparison);

public T Find(Predicate<T> match);

public List<T> FindAll(Predicate<T> match);

public bool Exists(Predicate<T> match);





發現了什麼了嗎? 沒錯 浪打 就是一個委派 委派就是一個方法 所以使用浪打 跟使用一般的方法只差在多寫一個 方法

(這句話其實不完全正確 但是暫時這麼想會比較好理解)





以前老師說 一般的 = 在C# 是向左指派的意思 而 => 則是 向右指派 所以 x 可以被 => 右邊所用...

恩 完全正確 但是當時我也 完全不知道這是在講沙米碗糕 真是給他打敗啦 還是說只有我比較笨 聽不懂上面這句話





實際玩弄很久之後 才大徹大悟 哎呀 他不過是濃縮寫法的方法

=> 的左邊 就是方法傳入參數 會由叫用委派的地方提供

而且會自動推斷型別 所以不像一般方法需要 給傳入參數標明型別

=> 的右邊 就是方法要執行的內容

一行寫法 可以省略 { } return 跟 ;

整個浪打本身 就是一個匿名方法 所以不像一般方法需要命名


沒傳入參數 沒回傳型別 浪打
        private void Foo()
        {
            Action Fn = () => { };
        }
沒傳入參數 沒回傳型別 方法
        private void Fn()
        {
        }

有傳入參數 沒回傳型別 浪打
        private void Foo()
        {
            Action<int> Fn = i => { };
        }
有傳入參數 沒回傳型別 方法
        private void Fn(int i)
        {
        }

沒傳入參數 有回傳型別 浪打
        private void Foo()
        {
            Func<bool> Fn1 = () => true;
            Func<bool> Fn2 = () => { return true; };
        }
沒傳入參數 有回傳型別 方法
        private bool Fn()
        {
            return true;
        }

有傳入參數 有回傳型別 浪打
        private void Foo()
        {
            Func<int, bool> Fn1 = i => i > 0;
            Func<int, bool> Fn2 = i => { return i > 0; };
        }
有傳入參數 有回傳型別 方法
        private bool Fn(int i)
        {
            return i > 0;
        }




什麼? 你說 LINQ 跟查詢在哪? 下回分曉 哈哈

沒有留言:

張貼留言