首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解LINQ中的=>

理解LINQ中的=>
EN

Stack Overflow用户
提问于 2010-11-05 21:55:14
回答 6查看 167关注 0票数 2

我正在使用LINQpad来掌握LINQ,在其中一个XML示例中,它们具有以下代码

代码语言:javascript
复制
var bench =
    new XElement ("bench",
        new XElement ("toolbox",
            new XElement ("handtool", "Hammer"),
            new XElement ("handtool", "Rasp")
        ),
        new XElement ("toolbox",
            new XElement ("handtool", "Saw"), 
            new XElement ("powertool", "Nailgun")
        ),
        new XComment ("Be careful with the nailgun")
    );

var toolboxWithNailgun =
    from toolbox in bench.Elements()
    where toolbox.Elements().Any (tool => tool.Value == "Nailgun")
    select toolbox.Value;

我对tool => tool.Value == "Nailgun"很好奇

那到底是怎么回事?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-11-05 22:10:28

Lambda表达式,一个内联定义的函数。

编译器实际上将Lambda转换为一个类,该类包含引用lambda所做的所有内容的字段。如果您打开一个包含lambda表达式的程序集,您将看到这些具有奇怪名称的类,比如<string>b_0() : Void

Lambda还依赖于编译器的大量类型推断。虽然您可以明确说明lambda中涉及的类型,但您通常可以让编译器自己找出它。毫无疑问,编译器会确保lambda是强类型的,即使您没有指定它们。

此函数:

代码语言:javascript
复制
public string Foo(int bar)
{
  return bar.ToString();
}

可以通过以下方式表示为lambdas:

代码语言:javascript
复制
x => x.ToString()

bar => bar.ToString()

int bar => bar.ToString()

(int bar) =>
{
  return bar.ToString();
}

它们都是等价的。

票数 2
EN

Stack Overflow用户

发布于 2010-11-05 21:57:36

这是一个用于快速指定匿名函数的C# Lambda Expression。如果tool.Value为"Nailgun“,则此特定的lambda函数返回true

票数 3
EN

Stack Overflow用户

发布于 2010-11-05 21:58:34

它被称为lambda,本身并不是一个LINQ特性。

这意味着它将匹配任何工具值等于“钉枪”的元素。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4106485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档