=> 在 Linq 表达式中是什么意思

本文关键字:是什么 意思 表达式 Linq | 更新日期: 2023-09-27 18:33:48

*虽然这是一个重复的问题,但我以前从未在代码中看到过"=>"表达式。如果我知道这是一个特定的lambda表达式,我会自己谷歌并弄清楚它。谢谢!

我是使用 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)));
    }
}

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

几个问题:=>在这里做什么?Intellisense告诉我"v"是一个整数,但它从未被声明过。这是如何工作的?

=> 在 Linq 表达式中是什么意思

这个表示法=>表示lambda表达式

例:

Enumerable.Range(0,100).Where(x=>x==1);

这里x=> x==1是一个匿名委托,接受int作为参数并返回bool。是的:

delegate bool SomeDelegate(int x);

您可以将委托人的正文分配给:

bool Function(int x)
{ 
   return x==1;
}

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

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

源:阅读有关 lambda 表达式的信息

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

运算符

=>与 linq 无关 - 它是一个 lambda 表达式。它用于创建匿名函数,因此您无需为每件小事创建完整的函数。

所以表达:

s => s + 5 

可以翻译成:

int fun(int s)
{
return s + 5;
}

你也可以阅读这篇非常短的文章,它很好地总结了什么是lambda表达式,如何使用它以及何时使用它。

给出的例子是

List<int> numbers = new List<int>{11,37,52};
List<int> oddNumbers = numbers.where(n => n % 2 == 1).ToList();
//Now oddNumbers is equal to 11 and 37

在第 2 行,oddNumbers 现在等于数字,其中 number % 2 等于 1,因此其中数字是奇数

为了更好地理解这一点。我会在没有 LINQ 的情况下重写您的代码,如下所示:

public static class Extend
    {
        public static double StandardDeviation(this IEnumerable<double> values)
        {
            double avg = values.Average();
            var newValues = new List<double>();
            foreach (var v in values)
            {
                newValues.Add(Math.Pow(v - avg, 2));
            }
            return Math.Sqrt(newValues.Average());
        }
    }

现在,您可以比较这两个版本的代码并查看关系。

=>是Lamdba表达式的表示法,基本上是一种编写匿名方法的手法:)

它还会在可能的地方自动推断类型,这就是为什么 v 从未声明为 int,但无论如何都被编译器理解为 int。

这是一个 lambda 表达式。

看看这篇文章 : http://msdn.microsoft.com/en-us/library/vstudio/bb397687.aspx

将"v"作为列表的一个元素(因此类型取决于列表(,"=>"表示与此元素相关的操作(Math.Pow((是操作(。