*虽然这是一个重复的问题,但我之前从未在代码中看到过表达式"=>".如果我知道这是一个特别的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,但它从未声明过.这是如何运作的?
这种表示法=>
意味着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表达式:我为什么要使用它们?
运算符=>
与linq无关 - 它是一个lambda表达式.它用于创建匿名函数,因此您不需要为每个小东西创建一个完整的函数.
所以表达式:
s => s + 5
Run Code Online (Sandbox Code Playgroud)
可以翻译成:
int fun(int s)
{
return s + 5;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6131 次 |
最近记录: |