拉姆達函數積分表達式?
讓我們先看一個簡單的拉姆達表達式:
x=>x/2
這個表達式的意思是:x為參數,對x進行相應的操作后的結果作為返回值。
通過這個拉姆達表達式,我們可以看到:
這個表達式沒有任何類型信息,但這并不代表拉姆達表達式是和類型無關的。在實際運用上,編譯器會根據表達式的上下文判斷上述x的類型及返回值的類型。例如:
using System;
using System.Linq;
public class LambdaTest
{
static void Main() {
Func<int, double> expr = x => x / 2;
int someNumber = 9;
Console.WriteLine( "Result: {0}", expr(someNumber) );
}
}
上述代碼中,加粗部分為拉姆達表達式。Func<>為 delegate System.Func<T,TResult>
上述運行結果為:Result:4
根據我們學習的數學知識,9/2應當結果是4.5,為什么上述結果會是4而不是4.5呢?是因為x是整型,x/2的結果也是整型,雖然在上述我們拉姆達表達式中,我們指明結果是double,但x/2這個表達式,由于x是整型,故計算出來的結果已被截掉小數,然后再轉換為double,故結果是4,而不是4.5
要使結果是4.5,則只需定義上述相關語句為 Func<double,double> expr = x => x / 2 即可。
無參數的拉姆達表達式:
using System;
using System.Linq;
public class LambdaTest
{
static void Main() {
int counter = 0;
WriteStream( () => counter++ );
Console.WriteLine( "Final value of counter: {0}",counter );
}
static void WriteStream( Func<int> counter ) {
for( int i = 0; i < 10; ++i ) {
Console.Write( "{0}, ", counter() );
}
Console.WriteLine();
}
}