我正在通过C#/ ASP.NET教程,我遇到了一个我从未见过的运算符。
return RSVPs.Any(r => r.AttendeeName.Equals(userName, StringComparison.InvariantCultureIgnoreCase));
= =>在这行代码中意味着什么?
答案 0 :(得分:3)
这是定义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);
答案 1 :(得分:2)
它定义了lambda expression。
r => r.AttendeeName.Equals(userName, StringComparison.InvariantCultureIgnoreCase)
相当于
delegate( RSVP r ) { return r.AttendeeName.Equals(userName, StringComparison.InvariantCultureIgnoreCase); }
答案 2 :(得分:2)
这是一个lambda表达式。在示例中,您给出“r”是列表中的项目。此代码将迭代您的列表[RSVP],查找“r”,其中AttendeeName与您的userName中的任何名称相同。
为了理解发生了什么,你需要了解代表,但基本上Coles Notes版本是=&gt;左边的参数。 (在这种情况下为r)是列表[RSVPs]中的一个项目,正在按顺序迭代,对于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;
}
答案 3 :(得分:1)
所有lambda表达式都使用lambda operator =&gt;,它被读作“转到”。 lambda运算符的左侧指定输入参数(如果有),右侧包含表达式或语句块。 lambda表达式x =&gt; 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
答案 4 :(得分:0)
=>
是lambda表达式的一部分,将其左侧的参数与其右侧的表达式/语句相关联。根据它的使用方式,它可以代表匿名代表:
return RSVPs.Any(delegate (RSVP r) { r.AttendeeName.Equals(userName, StringComparison.InvariantCultureIgnoreCase) });
或等效的表达式树:
Expression<Func<RSVP, bool>> e = r => r.AttendeeName.Equals(userName, StringComparison.InvariantCultureIgnoreCase);