行情北京 上海 广州 深圳 沈阳 济南 郑州 武汉 长沙 南京 西安 成都 昆明 杭州
e杂志下载
 首页 | 资讯 网刊 视频 评测  企业:服务器 网络 存储 通信 安全 技术开发 信息化-方案 | ITPUB IXPUB
 商务笔记本 台式机 投影机 打印扫描 办公产品 耗材 软件 学院 下载 驱动  家庭数字家电 家庭组网
 个人DIY硬件 | 手机 GSM CDMA 无线电 GPS| 数码影像 相机 摄像机 | 消费数码 MP3 | 论坛 | 经销商社区
 报价中心 三维图秀 产品评论 产品大全 使用手册 术语详解 厂商专区 二手市场 维修服务 疑难解答 IT搜索
 
 当前位置:技术首页 > .NET专区> .NET专区 > .NET文档 > 文章页
处理 SSI 文件时出错
处理 SSI 文件时出错
处理 SSI 文件时出错
处理 SSI 文件时出错
处理 SSI 文件时出错
处理 SSI 文件时出错

C# 3.0新特性体验之Lambda表达式

                           
作者:ITPUB 发表日期:2006-04-26 12:23
  内容导航: 上一页 1 2 下一页
 

【IT168 技术文档】

  C#2.0介绍了一个新特性--匿名方法,允许开发者在线(inline)声明自己的函数代码而无须使用委托函数(delegate function)。C#3.0中提供了一个新特性--Lambda表达式,它提供了完成相同目标的更加简洁的格式。让我们在讨论Lambda表达式以前仔细研究一下匿名方法。
 
匿名方法

  假设你需要创建一个按钮,当点击它的时候更新ListBox里的内容。在C#1.0和1.1里,你要这样做:
public MyForm() {  listBox = new ListBox(...);  textBox = new TextBox(...);  addButton = new Button(...);  addButton.Click += new EventHandler(AddClick); } void AddClick(object sender, EventArgs e) {  listBox.Items.Add(textBox.Text); }
  在C#2.0里,你需要这样做:
public MyForm() {  listBox = new ListBox(...);  textBox = new TextBox(...);  addButton = new Button(...);  addButton.Click += delegate  {   listBox.Items.Add(textBox.Text); };
  就像你看到的一样,你不必要特别的声明一个新方法来将它连接到一个事件上。你可以在C#2.0里使用匿名方法来完成同样的工作。C#3.0里介绍了一种更加简单的格式,Lambda表达式,你可以直接使用"=>"来书写你的表达式列表,后面跟上一个表达式或者语句块。
 
Lambda表达式中的参数
 
  Lambda表达式中的参数可以是显式或者隐式类型的。在一个显式类型参数列表里,每个表达式的类型是显式指定的。在一个隐式类型参数列表里,类型是通过上下文推断出来的:
 
(int x) => x + 1 // 显式类型参数
(y,z) => return y * z; // 隐式类型参数
 
Lambda演算实例
 
  下面的例子给出了两种不同的方法来打印出一个list中长度为偶数的字符串。第一种方法AnonMethod使用了匿名方法,第二种LambdaExample则是通过Lambda演算实现:
// Program.cs using System; using System.Collections.Generic; using System.Text; using System.Query; using System.XML.XLinq; using System.Data.DLinq; namespace LambdaExample {  public delegate bool KeyValueFilter<K, V>(K key, V value);  static class Program  {   static void Main(string[] args)   {    List<string> list = new List<string>();    list.Add("AA");    list.Add("ABC");    list.Add("DEFG");    list.Add("XYZ");    Console.WriteLine("Through Anonymous method");    AnonMethod(list);    Console.WriteLine("Through Lambda expression");    LambdaExample(list);    Dictionary<string, int> varClothes= new Dictionary<string,int>();    varClothes.Add("Jeans", 20);    varClothes.Add("Shirts", 15);    varClothes.Add("Pajamas", 9);    varClothes.Add("Shoes", 9);    var ClothesListShortage = varClothes.FilterBy((string name,    int count) => name == "Shoes" && count < 10);    // example of multiple parameters    if(ClothesListShortage.Count > 0)     Console.WriteLine("We are short of shoes");    Console.ReadLine();  }  static void AnonMethod(List<string> list)  {   List<string> evenNumbers = list.FindAll(delegate(string i)   { return (i.Length % 2) == 0; });   foreach (string evenNumber in evenNumbers)   {    Console.WriteLine(evenNumber);   }  }  static void LambdaExample(List<string> list)  {   var evenNumbers = list.FindAll(i =>(i.Length % 2) == 0); // example of single parameter   foreach(string i in evenNumbers)   {    Console.WriteLine(i);   }  } } public static class Extensions {  public static Dictionary<K, V> FilterBy<K, V> (this Dictionary<K, V> items, KeyValueFilter<K, V> filter)  {   var result = new Dictionary<K, V>();   foreach(KeyValuePair<K, V> element in items)   {    if (filter(element.Key, element.Value))     result.Add(element.Key, element.Value);   }   return result;  }   } }

 

上一页 1 2 下一页
【内容导航】  
第2页 C# 3.0新特性体验之Lambda表达式(下)
下一篇:在VB 2005中定制自己的异常
 
  网友评论
处理 SSI 文件时出错