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