C#大杂烩&&Lambda表达式,Generic以及Linq完整精解

C#大杂烩&&Lambda表达式,Generic以及Linq完整精解

csharp 语言新特性
• C#2.0 引入泛型
• C#3.0 引入Lambda及Linq
• C#4.0 更多的动态特性dynmaic

四大块,泛型,Lambda表达式,Linq,匿名方法

一 泛型 (Generic)

•List books=new List();
• Book book = books[0];
这是现在的List,声明后List内加入的数据类型都是同一种,也就是上面例子的Book
但是以前的ArrayList ,就属于泛型,里面的数据类型是可以为任意的,如果要用来实例化别的Book对象,用强制类型转换
• ArrayList books = new ArrayList();
• Book book = (Book) books[0];

二 匿名方法

delegate(参数){ 方法体}
可以当一个匿名方法
new Thread(new ThreadStart(delegate(){…….}));
delegate()里面也可以有参数,delegate(){…….}这个整体就是一个方法,在大括号内为方法体
• 可以被隐式转换为一个兼容的委托类型
new Thread(delegate(){…….});

与Lambda比较

Delegate:
MyDelegate d = delegate(double x){return x+5;};
Lambda:
MyDelegate d = x=>{return x+5};
MyDelegate d = x=>x+5;

三 Lambda表达式

相当于匿名方法的简写
省略delegate, 甚至省略参数类型
直接用(参数)=>{语句或表达式}
• 例
button1.Click += (sender,e)=>{……}
new Thread(()=>{….}).Start();
PlotFun(x=>x*x, 0, 100)
总之
• Lambda表达式比匿名函数简单
• 匿名函数比Lambda表达式多一个功能:
不写(参数)的匿名函数
可以转成任意多个参数的委托

四 Linq(相当于一门C#内置的数据库查询语言)

• LINQ:Language Integrated Query
• 常见的形式
 from c in customers
来自于customers的数据
 where c.Age>10
数据的Age要求大于10
 orderby c.Name
用Name排序
 select new {c.Name, c.Phone}
与SQL数据库查询语言类似,而且性能有保障,比自己写的查询大多数是要好的。
• 相当于Lambda
 customers
 Where(c=> c.Age>10)
 OrderBy(c => c.Name)  Select(c => new { c.Name, c.Phone })

Linq示例

int[] arr = new int[] { 8, 5, 89, 3, 56, 4, 1, 58 };
var m = from n in arr where n < 5 orderby n select n*n;
foreach (var n in m)
{ 
Console.WriteLine(n); 
}

总之

• 匿名函数使用delegate
• Lambda表达式使用=>
• Linq使用from, where, select

原创文章 66 获赞 39 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44739495/article/details/104977135