=> 在 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"是一个整数,但它从未被声明过。这是如何工作的?
这个表示法=>
表示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((是操作(。