簡體   English   中英

=>運算符有什么作用?

[英]What does the => operator do?

我正在通過一個C#/ ASP.NET教程,我遇到了一個我從未見過的運算符。

return RSVPs.Any(r => r.AttendeeName.Equals(userName, StringComparison.InvariantCultureIgnoreCase));

什么=>在這行代碼中意味着什么?

這是定義lambda表達式的語法。 它本質上是C#中委托/匿名方法的簡寫

Func<int,int> add2 = x => x + 2;
int value = add2(42); // value == 44

在此特定示例中,它定義了一個獲取RSVP實例的委托,如果AttendeeName值等於傳入的userName,則返回true。如果傳入的委托對於集合中的任何值為true,則Any擴展方法返回true。

這是編寫您發布的樣本的擴展方式

Func<RSPV,bool> del = r => r.AttendeeName.Equals(userName, StringComparison.InvariantCultureIgnoreCase);
return RSVPS.Any(del);

它定義了一個lambda表達式

r => r.AttendeeName.Equals(userName, StringComparison.InvariantCultureIgnoreCase)

相當於

delegate( RSVP r ) { return r.AttendeeName.Equals(userName, StringComparison.InvariantCultureIgnoreCase); }

這是一個lambda表達式。 在示例中,您給出“r”是列表中的項目。 此代碼將迭代您的列表[RSVP],查找“r”,其中AttendeeName與您的userName中的任何名稱相同。

為了理解發生了什么,你需要理解委托,但基本上Coles Notes版本是=>(在這種情況下是r)左邊的參數是列表[RSVP]中正在迭代的項目順便說一句,對於每個r的實例,你正在檢查一些東西。 從用戶的角度來看,這模糊地等同於:

public bool HasRSVP(List<RSVP> RSVPs, string userName)
{
    foreach(RSVP r in RSVPs)
        if(r.AttendeeName.Equals(userName, StringComparison.InvariantCulture))
            return true;
    return false;
}

所有lambda表達式都使用lambda operator =>,它被讀作“轉到”。 lambda運算符的左側指定輸入參數(如果有),右側包含表達式或語句塊。 lambda表達式x => x * x被讀為“x轉到x乘以x”。 可以將此表達式分配給委托類型,如下所示:

delegate int del(int i);
static void Main(string[] args)
{
    del myDelegate = x => x * x;
    int j = myDelegate(5); //j = 25
}

http://msdn.microsoft.com/en-us/library/bb397687.aspx

Func<int, bool> myFunc = x => x == 5;
bool result = myFunc(4); // returns false of course

=>是lambda表達式的一部分,將參數(s)與其左側相關聯,並將表達式/語句與其右側相關聯。 根據它的使用方式,它可以表示匿名委托:

return RSVPs.Any(delegate (RSVP r) { r.AttendeeName.Equals(userName, StringComparison.InvariantCultureIgnoreCase) });

或者等效的表達式樹:

Expression<Func<RSVP, bool>> e = r => r.AttendeeName.Equals(userName, StringComparison.InvariantCultureIgnoreCase);

暫無
暫無

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

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