Lambda 運算式 (
令牌 =>
支援兩種形式:作為 λ 運算子,以及在 運算式主體定義中,作為連接成員名稱與成員實作的分隔符。
Lambda 運算子
在 Lambda 運算式中,Lambda 運算符 =>
會將左側的輸入參數與右側的 Lambda 主體分隔開來。
下列範例使用 LINQ 功能搭配方法語法來示範 Lambda 表達式的使用方式:
string[] words = { "bot", "apple", "apricot" };
int minimalLength = words
.Where(w => w.StartsWith("a"))
.Min(w => w.Length);
Console.WriteLine(minimalLength); // output: 5
int[] numbers = { 4, 7, 10 };
int product = numbers.Aggregate(1, (interim, next) => interim * next);
Console.WriteLine(product); // output: 280
Lambda 表達式的輸入參數會在編譯階段進行強類型檢查。 當編譯程式可以推斷輸入參數的類型時,例如上述範例,您可以省略類型宣告。 如果您需要指定輸入參數的類型,則必須針對每個參數執行此動作,如下列範例所示:
int[] numbers = { 4, 7, 10 };
int product = numbers.Aggregate(1, (int interim, int next) => interim * next);
Console.WriteLine(product); // output: 280
下列範例示範如何定義不含輸入參數的 Lambda 運算式:
Func<string> greet = () => "Hello, World!";
Console.WriteLine(greet());
如需詳細資訊,請參閱 Lambda 運算式。
表達式主體定義
表達式主體定義具有下列一般語法:
member => expression;
其中 expression
是有效的表達式。 的 expression
傳回型別必須隱含轉換成成員的傳回型別。 如果成員:
- 具有回傳
void
型別或 - 是:
- 建構函式
- 終結器
- 屬性或索引器存取子
set
expression
必須是 語句表達式。 因為表達式的結果會被捨棄,所以該表達式的傳回型別可以是任何類型。
下列範例顯示一個方法的運算式主體定義:
public override string ToString() => $"{fname} {lname}".Trim();
這是下列方法定義的速記版本:
public override string ToString()
{
return $"{fname} {lname}".Trim();
}
您可以為方法、運算子、只讀屬性、建構函式、完成項和屬性和索引器存取子建立表達式主體定義。 如需詳細資訊,請參閱 表達式主體成員。
運算子多載性
=>
運算子無法多載。
C# 語言規格
如需 Lambda 運算子的詳細資訊,請參閱 C# 語言規格的匿名函式運算式一節。