Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数。通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数。 Lambda 表达式对于编写 LINQ 查询表达式特别有用。
若要创建 Lambda 表达式,需要在 Lambda 运算符 => 左侧指定输入参数(如果有),然后在另一侧输入表达式或语句块。 例如,lambda 表达式 x => x * x 指定名为 x 的参数并返回 x 的平方值。
代码示例1:
delegate int del(int i); static void Main(string[] args) { del myDelegate = x => x * x; int j = myDelegate(5); //j = 25 }
语句 lambda 的主体可以包含任意数量的语句;但是,实际上通常不会多于两个或三个。
delegate void TestDelegate(string s); … TestDelegate myDel = n => { string s = n + " " + "World"; Console.WriteLine(s); }; myDel("Hello");
LINQ 查询代码示例
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Diagnostics; using System.Reflection; namespace PLINQExample { public partial class Form1 : Form { public Form1() { InitializeComponent(); } /// <summary> /// 代码演示 将一个顺序查询转换成并行查询 /// 查询的是本程序集中定义的所有过时(obsolete)方法 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { Assembly assembly = Assembly.GetEntryAssembly(); var query = from type in assembly.GetExportedTypes().AsParallel() from method in type.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static) let obsoleteAttrType = typeof(ObsoleteAttribute) where Attribute.IsDefined(method, obsoleteAttrType) orderby type.FullName let obsoleteAttrObj = (ObsoleteAttribute)Attribute.GetCustomAttribute(method, obsoleteAttrType) select String.Format("Type = {0} Method = {1} Message = {2} ", type.FullName, method.ToString(), obsoleteAttrObj.Message); // 显示结果 foreach (var result in query) MessageBox.Show(result); // 这个方法允许多个线程同时处理结果 //query.ForAll(Whatever.MakeTip); } private void button2_Click(object sender, EventArgs e) { Whatever.MakeTip("过时方法"); } } // 第二个参数若设置为true,则将使用已过时的元素视为错误 [Obsolete("该类已经过时", false)] public class Whatever { // 定义过时方法 // [Obsolete] [method: Obsolete("该方法已经过时")] public static void MakeTip(string sMsg) { MessageBox.Show(sMsg); } } }