C# 3.0 新特性

本文详细解读了C# 3.0引入的多项新特性,包括扩展方法、隐式类型本地变量、匿名变量、对象和Collection初始化符、Lambda表达式、查询表达式和表达式树等,提供了丰富的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个引起我的思考:

public static IEnumerable<TSource> Where<TSource>(
this IEnumerable<TSource> source,
Func<TSource,
bool> predicate
)

这个 this 参数怎样去解释? Func<TSource, bool > 这个怎样解释?

所以看了一下,thisC#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!!");

使用如上的表达式树的方法,你可以使用过滤器变量中的各种属性来检查树的内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值