<p>lambda是一种内联定义的函数类型。除了lambda之外,通常还有一种变量类型,可以保存对函数lambda或其他函数的引用。</p>
<p>例如,这里有一段不使用lambda的C代码:</p>
<pre class="lang-cs prettyprint-override"><code>public Int32 Add(Int32 a, Int32 b)
{
return a + b;
}
public Int32 Sub(Int32 a, Int32 b)
{
return a - b;
}
public delegate Int32 Op(Int32 a, Int32 b);
public void Calculator(Int32 a, Int32 b, Op op)
{
Console.WriteLine("Calculator: op(" + a + ", " + b + ") = " + op(a, b));
}
public void Test()
{
Calculator(10, 23, Add);
Calculator(10, 23, Sub);
}
</code></pre>
<p>这调用Calculator,传递的不仅仅是两个数字,而是调用Calculator内部的哪个方法来获得计算结果。</p>
<p>在C#2.0中,我们得到了匿名方法,它将上述代码缩短为:</p>
<pre class="lang-cs prettyprint-override"><code>public delegate Int32 Op(Int32 a, Int32 b);
public void Calculator(Int32 a, Int32 b, Op op)
{
Console.WriteLine("Calculator: op(" + a + ", " + b + ") = " + op(a, b));
}
public void Test()
{
Calculator(10, 23, delegate(Int32 a, Int32 b)
{
return a + b;
});
Calculator(10, 23, delegate(Int32 a, Int32 b)
{
return a - b;
});
}
</code></pre>
<p>然后在C#3.0中,我们得到了lambdas,这使得代码更短:</p>
<pre class="lang-cs prettyprint-override"><code>public delegate Int32 Op(Int32 a, Int32 b);
public void Calculator(Int32 a, Int32 b, Op op)
{
Console.WriteLine("Calculator: op(" + a + ", " + b + ") = " + op(a, b));
}
public void Test()
{
Calculator(10, 23, (a, b) => a + b);
Calculator(10, 23, (a, b) => a - b);
}
</code></pre>