当前位置: 首页 > 编程语言 > C# > 正文

初探C# 3.0

时间:2010-12-16 博客园 GWPBrian

C#3.0已经推出好一段时间了,由于种种原因,一直没有去学习,这两天在园 子中看到老赵的拯救C# 2.0,但是我们真做的到吗?。里面提到了些C#3.0的新 特性和优势。勾起了我对3.0的兴趣,初探学习一下,分享给新手。

在 C#2.0中,微软给我们带来了一些新的特性,例如泛型,匿名委托等。然而,这 些新的特性多多少少会给人一种从别的语言中“抄”来的感觉(例如 泛型类似C++的模板,一些特性类似Java中的一些东西)。但是在C#3.0中,微软 给我带来的一些新特性可能是以前所有开发语言都没有的特性。这无疑大大的体 现了C#3.0在开发语言中强大的优势。

Lambda表达式

Lambda 表达 式是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式目 录树类型。所有 Lambda 表达式都使用 Lambda 运算符 =>。关于Lambda更详 细的讲解大家可以参看 MSDN。里面说的很清楚。

这里简单举个例子来说 明Lambda的好处。Lambda在对匿名委托的处理上提供了更清楚的实施方式。例如 在2.0中。我们可以写这样的代码:

public class Example
{
   public static void Demo (System.Windows.Controls.TextBlock outputBlock)
   {
       Func<string, string> convert = delegate(string s)
          { return s.ToUpper(); };

      string name = "Dakota";
      outputBlock.Text += convert(name) + "\n";
   }
}

在 C# 中将 Func<(Of <(T, TResult>)>) 委托与匿名方法一起使用。

在3.0中,我们可以使用Lambda来更清楚的进行参数的传递:

public class Example
{
   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      Func<string, string> convert = s => s.ToUpper ();

      string name = "Dakota";
       outputBlock.Text += convert(name) + "\n";
   }
}

Lambda 表达式的基础类型是泛型 Func 委托之一。这 样能以参数形式传递 lambda 表达式,而不用显式将其分配给委托。尤其是,因 为 System.Linq 命名空间中许多类型方法具有 Func<(Of <(T, TResult>)>) 参数,因此可以给这些方法传递 lambda 表达式,而不用显 式实例化 Func<(Of <(T, TResult>)>) 委托。这样可以使我们的 代码更加简洁,逻辑上更易于理解。