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 | 生成重複序列 |