C#3.0 Lambda(转帖)

原文地址:http://blog.ccidnet.com/blog.php?do=showone&uid=12856&type=blog&itemid=213077

 

Lambda表达式是一个匿名方法,他可以包含一个表达式或者语句块,他能够创造委托或表达式树类型。

//Demo -带一个参数的Lambda表达式
namespace TestLambda
{
//声明一个委托,包含一个int型参数
delegate int del(int n);

public class MyLambda
{
public int TestMethod(int n)
{
///利用Lambda表达式构造一个委托
/// x => x * x 表达式表示一个方法此方法等同于
/// public int MethodName(int x)
/// {
/// return x*x;
/// }
/// 由此可以看出,=>左边x表示匿名方法的参数,右边 x*x 表示方法体
/// 这行代码可以总结为:实例化一个委托,此委托是用计算传入整型参数的平方
/// 如果将Lambda表达式改变为一个方法的话,则以下这行代码可以替换
/// del myDel=new del(MethodName);
del myDel = x => x * x;

///调用委托,实质调用Lambda表达式进行计算
int result = myDel(n);
return result;
}


}
class Program
{
static void Main(string[] args)
{
MyLambda my = new MyLambda();
///测试Lambda表达式
int result = my.TestMethod(10);
Console.WriteLine(result);
///输出结果为:100

}

}
}

//Demo2--带两个参数的及不带任何参数的Lambda表达式
namespace TestLambda
{

/// <summary>
/// 声明一个委托,包含两个int型参数
/// </summary>
/// <param name="n"></param>
/// <param name="m"></param>
/// <returns></returns>
delegate int del(int n,int m);

/// <summary>
/// 不带参数的委托
/// </summary>
/// <returns></returns>
delegate int delNoPar();



public class MyLambda
{
public int TestMethod(int n,int m)
{
///利用Lambda表达式构造一个委托
///Lambda表达式的参数x,y不需要事先声明,也可以不指明类型,当然也可以指明
///如:(int x,int y)=>x*y;
///完整的表达式是:del myDel=(int x,int y)=>x*y;

del myDel = (x,y)=> x * y;

///不带任何参数的Lambda表达式
///利用()来表示空参
///这行代码表示:要返回10*5的值
delNoPar testDel = () => 10 * 5;
Console.WriteLine(testDel());

///调用委托,实质调用Lambda表达式进行计算
int result = myDel(n,m);
return result;
}


}
class Program
{
static void Main(string[] args)
{
MyLambda my = new MyLambda();
///测试Lambda表达式
int result = my.TestMethod(10,3);
Console.WriteLine(result);

}

}
}
总结:
1.Lambda表达式,是匿名方法的一个替代,但是更加灵活
2.Lambda表达式,可以包含参数,也可以不包含,不包含时要用()表示
3.Lambda表达式参数可以显示指明类型,也可以不指定,由程序自动分析获得参数类型

你可能感兴趣的:(lambda)