簡體   English   中英

表達式主體成員與 Lambda 表達式

[英]Expression-bodied members vs Lambda expressions

lambda 表達式是被視為對象的代碼塊(表達式或語句塊)。 它可以作為參數傳遞給方法,也可以通過方法調用返回。

(input parameters) => expression
 SomeFunction(x => x * x);

看着這個語句,我想知道使用 lambdas 和使用 Expression-bodied 時有什么區別?

public string Name => First + " " + Last;

表達式體語法實際上只是屬性和(命名)方法的較短語法,沒有特殊含義。 特別是,它與 lambda 表達式無關。

這兩行是完全等價的:

public string Name => First + " " + Last;

public string Name { get { return First + " " + Last; } }

您還可以編寫表達式主體的方法(注意與您的 lambda 表達式執行相同操作的區別。在這里您指定返回類型和名稱):

public int Square (int x) => x * x;

代替

public int Square (int x)
{
    return x * x;
}

您還可以使用它來編寫 getter 和 setter

private string _name;
public Name
{
    get => _name;
    set => _name = value;
}

對於構造函數(假設一個名為Person的類):

public Person(string name) => _name = name;

使用元組語法,您甚至可以分配多個參數

public Person(string first, string last) => (_first, _last) = (first, last);

這也適用於分配給屬性。

表達體方法是語法糖。 而不是寫這個:

public string GetName()
{
    return First + " " + Last;
}

你可以這樣寫:

public string GetName() => First + " " + Last;

調用第一個或第二個的結果將完全相同。

各種表情體成員也是如此。

另一方面, 這里正式聲明的 lambda 表達式是:

可用於創建委托或表達式樹類型匿名函數

話雖如此,很明顯,盡管語法相似,但有兩種完全不同的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM