什么=>在Linq表达式中表示

Sha*_*aku 5 c# linq

*虽然这是一个重复的问题,但我之前从未在代码中看到过表达式"=>".如果我知道这是一个特别的lambda表达式,我会google'd并自己想出来.谢谢!

我是使用Linq的新手,所以当我在这段代码中遇到它时,使用"=>"确实让我很困惑:

using System;
using System.Linq;
using System.Collections.Generic;

public static class Extend
{
    public static double StandardDeviation(this IEnumerable<double> values)
    {
        double avg = values.Average();
        return Math.Sqrt(values.Average(v=>Math.Pow(v-avg,2)));
    }
}
Run Code Online (Sandbox Code Playgroud)

资料来源:通用清单的标准差?

几个问题:=>做什么?Intellisense告诉我'v'是一个int,但它从未声明过.这是如何运作的?

Kam*_*ski 8

这种表示法=>意味着lambda表达式

例:

Enumerable.Range(0,100).Where(x=>x==1);
Run Code Online (Sandbox Code Playgroud)

x=> x==1是一个匿名委托接受int作为参数并返回bool.它是:

delegate bool SomeDelegate(int x);
Run Code Online (Sandbox Code Playgroud)

并且您可以将委托的主体分配给:

bool Function(int x)
{ 
   return x==1;
}
Run Code Online (Sandbox Code Playgroud)

lambda表达式是一个匿名函数,可用于创建委托或表达式树类型.通过使用lambda表达式,您可以编写可以作为参数传递或作为函数调用的值返回的本地函数.Lambda表达式对于编写LINQ查询表达式特别有用.

要创建lambda表达式,请在lambda运算符=>的左侧指定输入参数(如果有),并将表达式或语句块放在另一侧.例如,lambda表达式x => x*x指定一个名为x的参数,并返回x平方的值.您可以将此表达式分配给委托类型,如以下示例所示:

source: 阅读lambda表达式

这是一个关于为什么要使用lambdas的问题:C#Lambda表达式:我为什么要使用它们?

  • 我无法相信来自维基百科的直接复制粘贴得到了许多赞成.问题也很容易被Googlable所取代 (9认同)

ely*_*hiv 6

运算符=>与linq无关 - 它是一个lambda表达式.它用于创建匿名函数,因此您不需要为每个小东西创建一个完整的函数.

所以表达式:

s => s + 5 
Run Code Online (Sandbox Code Playgroud)

可以翻译成:

int fun(int s)
{
return s + 5;
}
Run Code Online (Sandbox Code Playgroud)