(轉)拉姆達表達式(Lambda Expressions) =>寫法的涵義


 

 

讓我們先看一個簡單的拉姆達表達式:

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();
  }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM