这个引起我的思考:
public static IEnumerable<TSource> Where<TSource>(
this IEnumerable<TSource> source,
Func<TSource, bool> predicate
)
-
这个this 参数怎样去解释?
-
Func<TSource, bool>这个怎样解释?
所以看了一下,this是C#3.0新特性之扩展方法。
Func<T, TResult> 委托,
封装一个具有一个参数并返回 TResult 参数指定的类型值的方法
public delegate TResult Func<in T, out TResult>(
T arg
)
源文档 <http://msdn.microsoft.com/zh-cn/library/bb549151.aspx>
于是我就看了看C#3.0的新特性
- Visual C# 3.0新特性:隐式类型本地变量
Var I = 1;
Var intArray = new []{1,2,3,4};
- Visual C# 3.0新特性:匿名变量
C# 3.0使得你可以灵活的创建一个类的实例,而无需先写这个类的代码。所以你可以这样写代码:
new{hair="black",skin="green",teethCount=64}
- Visual C# 3.0新特性:扩展方法
扩展方法使你能够使用额外的静态方法来扩展各种类型。不过它们是非常有限的,也只能在实例方法不足够的情况下才作为候补使用。
扩展方法只能在静态类中被声明,并且以关键字"this"放在方法的第一个参数前来标识,如下就是一个有效的扩展方法的例子:
publicstaticintToInt32(thisstrings)
{
returnConvert.ToInt32(s);
}
- Visual C# 3.0新特性:对象和Collection初始化符
C# 3.0被希望来允许你包含一个初始化符,从而指定一个新创建的对象或者collection的初始值。这使得你能够一步结合声明和初始化。
Listanimals=newList{"monkey","donkey","cow","dog","cat"};
- Visual C# 3.0新特性:Lambda表达式:匿名方法的浓咖啡
C# 1.X允许你在方法里写代码段,你可以轻松的使用委托(delegate)来调用。委托无疑是有用的,并且可以在框架里任意使用,但是在很多实例里你必须为了使用它而声明一个方法或者一个类。因此,为了给你一个更加容易和简洁的编码方式,C# 2.0允许你使用匿名方法替换标准调用到委托。如下代码可以在.NET1.1或者更早的版本看到:
classProgram
{
delegatevoidDemoDelegate();
staticvoidMain(string[]args)
{
DemoDelegatemyDelegate=newDemoDelegate(SayHi);
myDelegate();
}
voidSayHi()
{
Console.Writeline("Hiya!!");
}
}
在C# 2.0,使用匿名方法,你必须这样重写代码:
classProgram
{
delegatevoidDemoDelegate();
staticvoidMain(string[]args)
{
DemoDelegatemyDelegate=delegate()
{
Console.Writeline("Hiya!!");
};
myDelegate();
}
}
尽管匿名方法对基于方法的委托调用更进了一步,但是Lambda表达式允许你用更加简洁,功能性的格式写匿名方法。
你可以将Lambda表达式作为一个参数列表来编写代码,跟在=>后面,再跟上一个表达式或者语句。以上的代码可以用如下的代码替换:
classProgram
{
delegatevoidDemoDelegate();
staticvoidMain(string[]args)
{
DemoDelegatemyDelegate=()=>Console.WriteLine("Hiya!!");
myDelegate();
}
}
尽管Lambda表达式显得更加简洁,实际上他们也是一个匿名方法的功能性超集。特别的,Lambda表达式提供了如下的额外的功能:
·它们允许参数类型是被推断的。匿名方法要求你必须清楚的陈述每个类型的状态。
·它们可以支持查询表达式或C#语句。
·它们可以被看作使用表达式树的数据。这是不能用匿名方法来做的。
- Visual C# 3.0新特性:查询表达式
coords.where(c=>c.x==1)
- Visual C# 3.0新特性:表达式树
C# 3.0包含了一个新类型,允许表达式能够当作运行时的数据使用。这个类型,System.Expressions.Expression,只是一个内存中一个lambda表达式的重新表达。结果是你的代码可以在运行时修改和检查Lambda表达式。
如下是一个表达式树的例子:
Expressionfilter=()=>Console.WriteLine("Hiya!!");
使用如上的表达式树的方法,你可以使用过滤器变量中的各种属性来检查树的内容
分享到:
相关推荐
VS2008下c#3.0新特性之var源码
c# 3.0 新特性(en)
C# 3.0新语言特性在.NET2.0基础上进行了改进,这些改进的功能可以大大简化我们编写程序。
C# 3.0 3.5 新特性 总结 最新在网上好不容易搜集的资料。
C#3.0,在短短几年中,微软就对C#进行了两次大的升级,为C#加入了许多新的特性,从而使C#变得更加强大也更加现代了
介绍C# 3.0新语言特性和改进内容,帮助开发人员更了解VS2008中的C#语言
文档全面介绍了C#3.0的语言特性。以及和2.0的不同和更新的结构 内容。和大家分享。
webcast关于C#3.0新特性的视频教程及相应的PDF,包括 Linq ,Lambda 等新技术
学习设计模式的好书。 本书为那些充满奥秘的设计模式提供了有效的C#3.0实现。” 如果想加速.NET应用程序的开发,你...本书条理清晰地介绍了经典的面向对象设计模式,并解释了怎样运用最新的C#3.0语言特性来编写它们。
C#3.0在此基础上进行一定改进,方便我们编写程序,并把主要的精力放在业务逻辑的实现上,减少重复工作,例如新特性中自动属性把字段的封装更加集成化了,把更多的重复工作交给了编译器来做,首先介绍下.NET框架版本...
C# 3.0 入门系列 主要介绍C#3.0新增特性dlinq的学习
相信能给大家一个崭新的认识,深刻的学习c#语言。
视频_c#3.0,VB9.0 新特性介绍
vs2008视频教程 vs2008视频教程
先依次介绍一下C# 3.0新语言特性和改进,然后从一条一条LINQ语句分析来贯穿LINQ的知识点。最后通过一个实例程序实战Linq to sql带来全新的编程体验。
本文档介绍了C#3.0的新特性以及这些新特性与LINQ的关系。内容为英文
Visual Studio 2008开发新特性系列课程(2):C#3.0与VB9.0的新特性介绍
这是微软提供的最新的C# 3.0例子,其中囊括了C#3.0的新特性,及LINQ的使用。对学习C#3.0的朋友们很有参考价值,值得下载!
.net新技术 framework新技术 C#新特性 Visual Studio新特性 .net framework3.5新技术 C#3.0 新特性Visual Studio2008新技术
C#设计模式利用新的C#3.0语言和.NET 3.5框架中的特性来实现开发社区中广为人知的23种设计模式。本书包含了揭示每种模式在实际中如何运用的丰富案例,以及对于模式及其最佳使用场合和最佳组合方式的富有洞察力的...