匿名、Lambda、Linq技術的學習

1.匿名類

var ObjFood = new
            {
                Name="外帶全家桶",
                Creator="KFC",
                Cost=108.99
            };

       聲明時必須初始化;不能用數組初始化;不能賦空

2.簡單擴展方法

      針對某種數據類型,必須定義在靜態類

 使用擴展方法

            string Str = "JMLJBYW";
            Console.WriteLine(Str + Str.Getlength());

    效果:

    使用擴展方法解決密封類的繼承限制

        Ps.使用sealed關鍵字能密封屬性(用於封裝dll)

        public static string ShowName(this Food obj)
        {
            return "食物名稱爲:" + obj.Name;
        }
            Food obj = new Food("全家桶", 108.99);
            Console.WriteLine(obj.ShowName());

3.委託

        public delegate int Cal(int a, int b);//聲明委託事件

        Cal obj = new Cal(Add);//創建委託對象

        obj -= Add;//斷開連接
        obj += Sub;//添加鏈接

        Console.WriteLine(obj(2,1).ToString());//使用

    被委託的方法必須是靜態方法

4.匿名方法和Lambda表達式

     匿名方法(接委託)

            Cal obj = delegate (int a, int b)
            {
                return a + b;
            };
            Console.WriteLine(obj(1, 2).ToString());

    Lambda表達式

            Cal obj = (int a, int b) => { return a + b; };
            Console.WriteLine(obj(1, 2));

      單參數縮寫形式

        public delegate int Single(int a);

        Single ObjX = a => a * a;//單參數縮寫
        Console.WriteLine(ObjX(1));

5.Linq技術

            var q = from item in obj
                    where item.Cost < 100//查找價格低於100的菜
                    orderby item.Cost
                    select item;

            var w = obj
                .Where(item => item.Cost < 100)
                .OrderByDescending(item => item.Cost)
                .Select(item=>item);

以上兩種表達式等價使用“.linq語句”時需要在括號中使用lambda表達式

      分組技術

            var w = obj
                .Where(item => item.Cost < 200)
                .OrderByDescending(item => item.Cost)
                .GroupBy(item=>item.Name.Substring(0,3))
                .Select(item=>item);

            foreach (var item in w)
            {
                Console.WriteLine("分組條件:{0}",item.Key);
                Console.WriteLine("");
                foreach (var food in item)
                {
                    Console.WriteLine(food.Show());
                }
            }

      linq中的查詢時機

          延遲執行:需要在查詢結束之後遍歷集合展示數據的方法(上面的方法都是)

          立即執行:使用“聚合擴展方法”  如list.Count();會立刻返回一個數據

      查詢語句                                                                       查詢方法

    高級linq語句

Count 總數
Max/Min 最大/最小值
Average 平均數
Take 取走指定數量的項
Skip 跳過指定數量的項
TakeWhile 滿足條件返回序列
SkipWhile 滿足條件跳過序列

 

Range 生成整數序列
Repeat 生成重複序列

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章