行情北京 上海 广州 深圳 沈阳 济南 郑州 武汉 长沙 南京 西安 成都 昆明 杭州
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 下一页
 

  如果你安装了Visual Studio 2005 and LinQ Preview,你可以使用编辑器来编译程序。如果没有的话,可以使用命令行方式:
C:\Program Files\LINQ Preview\Bin\Csc.exe /reference:"C:\Program Files\LINQ Preview\Bin\System.Data.DLinq.dll" /reference:C:\Windows\Microsoft.net\Framework\v2.0.50727\System.Data.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:"C:\Program Files\LINQ Preview\Bin\System.Query.dll" /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.XML.dll /reference:"C:\Program Files\LINQ Preview\Bin\System.Xml.XLinq.dll" /target:exe Program.cs
中间语言结果显示
 
  打开ILDASM,双击AnonMethod函数你将看到C#编译器产生的中间语言代码:
.method private hidebysig static void AnonMethod(class [mscorlib]System.Collections.Generic.List`1<string> list) cil managed {  // Code size 96 (0x60)  .maxstack 4  .locals init ([0] class [mscorlib]System.Collections.Generic.List  `1<string> evenNumbers,  [1] string evenNumber,  [2] valuetype [mscorlib]System.Collections.Generic.List  `1/Enumerator<string> CSCODE_REPLACEMENT 000,  [3] bool CSCODE_REPLACEMENT 001)  IL_0000: nop  IL_0001: ldarg.0  IL_0002: ldsfld class [mscorlib]System.Predicate  `1<string> LambdaExample.Program::  `<>9__CachedAnonymousMethodDelegate1'  IL_0007: brtrue.s IL_001c  IL_0009: ldnull  IL_000a: ldftn bool LambdaExample.Program::  `<AnonMethod>b__0'(string)  IL_0010: newobj instance void class [mscorlib]System.Predicate  `1<string>::.ctor(object, native int)  IL_0015: stsfld class [mscorlib]System.Predicate`1<string>  LambdaExample.Program::  `<>9__CachedAnonymousMethodDelegate1'  IL_001a: br.s IL_001c  IL_001c: ldsfld class [mscorlib]System.Predicate`1<string>  LambdaExample.Program::'<>  9__CachedAnonymousMethodDelegate1'  IL_0021: callvirt instance class [mscorlib]System.Collections.  Generic.List`1<!0> class [mscorlib]System.  Collections.Generic.List`1<string>::  FindAll(class [mscorlib]System.Predicate`1<!0>)  IL_0026: stloc.0  IL_0027: nop  IL_0028: ldloc.0  IL_0029: callvirt instance valuetype [mscorlib]System.Collections.  Generic.List`1/Enumerator<!0> class  [mscorlib]System.Collections.Generic.List`1  <string>::GetEnumerator()  IL_002e: stloc.2  .try  {   IL_002f: br.s IL_0042   IL_0031: ldloca.s CSCODE_REPLACEMENT 000   IL_0033: call instance !0 valuetype [mscorlib]System.   Collections.Generic.List`1/Enumerator   <string>::get_Current()   IL_0038: stloc.1   IL_0039: nop   IL_003a: ldloc.1   IL_003b: call void [mscorlib]System.Console::   WriteLine(string)   IL_0040: nop   IL_0041: nop   IL_0042: ldloca.s CSCODE_REPLACEMENT 000   IL_0044: call instance bool valuetype [mscorlib]System.   Collections.Generic.List`1/Enumerator   <string>::MoveNext()   IL_0049: stloc.3   IL_004a: ldloc.3   IL_004b: brtrue.s IL_0031   IL_004d: leave.s IL_005e  } // end .try  finally  {   IL_004f: ldloca.s CSCODE_REPLACEMENT 000   IL_0051: constrained. valuetype [mscorlib]System.Collections.   Generic.List`1/Enumerator<string>   IL_0057: callvirt instance void [mscorlib]System.   IDisposable::Dispose()   IL_005c: nop   IL_005d: endfinally  } // end handler  IL_005e: nop  IL_005f: ret } // end of method Program::AnonMethod
  这里我们可以看到,实际上匿名方法和lambda表达式生成了相同的中间代码,并且他们的执行也是类似的。
 
多参数的Lambda表达式
 
  Lambda表达式可以带上多个参数,比如你可以声明一个Dictionary类型:
 
Clothing Type  Count
Shirts      15
Jeans      12
Shoes      9
Pajamas     9
 
  如果你有一个匿名方法(FilterBy)来通过键和值来过滤字典,按么你可以传递多个参数给lambda表达式来调用这个匿名方法。附带的代码完成了这个FilterBy的功能:
var ClothesListShortage = clothesList.FilterBy((string name, int count) => name == "Shoes" && count < 10);
上一页 1 2 下一页
【内容导航】  
第1页 C# 3.0新特性体验之Lambda表达式(上)
下一篇:在VB 2005中定制自己的异常
 
  网友评论
处理 SSI 文件时出错