繁体   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