Lambda 運算式 (=>
) 運算子會定義 Lambda 運算式
支援兩種形式的 =>
語彙基元:作為 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
必須是 陳述式運算式。 因為運算式結果會捨棄,所以該運算式的傳回型別可以是任何型別。
下列範例顯示 Person.ToString
方法的運算式主體定義:
public override string ToString() => $"{fname} {lname}".Trim();
它是下列方法定義的簡短版:
public override string ToString()
{
return $"{fname} {lname}".Trim();
}
您可以為方法、運算子、唯讀屬性、建構函式、完成項和屬性和索引子存取子建立運算式主體定義。 如需詳細資訊,請參閱運算式主體成員。
運算子是否可多載
無法多載 =>
運算子。
C# 語言規格
另請參閱
Collaborate with us on GitHub
The source for this content can be found on GitHub, where you can also create and review issues and pull requests. For more information, see our contributor guide.
.NET feedback
The .NET documentation is open source. Provide feedback here.
意見反應
提交並檢視相關的意見反應