什么是 '=>'?(C#语法问题)

13

我正在观看一段Silverlight教程视频,然后在示例代码中遇到了一个不熟悉的表达式。

什么是=>?这个符号叫什么名字?能否提供一个链接给我吗? 因为它们是特殊字符,所以我无法搜索到它们。

代码:

        var ctx = new EventManagerDomainContext();
        ctx.Events.Add(newEvent);
        ctx.SubmitChanges((op) =>
        {
            if (!op.HasError)
            {
                NavigateToEditEvent(newEvent.EventID);
            }
        }, null);

这是一个 C# 的 lambda 表达式。你可以在这里阅读有关它们的所有信息。 - Captain Sensible
2
如果lambda表达式只有一个参数,可以省略括号。(op) => 可以缩写为 op => - Michael Buen
3个回答

14

这是一个lambda表达式

如果您熟悉C# 2中的匿名方法,那么lambda表达式与之基本相似,但更加简洁。因此,您所拥有的代码可以使用匿名方法编写如下:

var ctx = new EventManagerDomainContext();
ctx.Events.Add(newEvent);
ctx.SubmitChanges(delegate(Operation op)
{
    if (!op.HasError)
    {
        NavigateToEditEvent(newEvent.EventID);
    }
}, null);

与匿名方法相同,Lambda表达式中捕获变量的行为等方面都是一样的。Lambda表达式和匿名方法共同被称为匿名函数

然而,它们之间也存在一些差异:

  • Lambda表达式可以转换为委托(delegate)以及表达式树(expression trees)
  • Lambda表达式有许多快捷方式,使其更加简洁:

    • 如果编译器能够推断出参数类型,您就不需要指定它们
    • 如果主体只有一个语句,则无需将其放入大括号中,并且可以省略返回语句的“return”部分
    • 如果您有一个带有推断类型的单个参数,则可以省略括号

    将这些组合在一起,您就可以获得如下的东西:

IEnumerable<string> names = people.Select(person => person.Name);
Lambda表达式不支持匿名方法的“我不在乎有多少个参数”的形式,例如:
EventHandler x = delegate { Console.WriteLine("I was called"); };

11

Lambda运算符

lambda表达式是一种匿名函数,可以用来创建委托表达式树类型。通过使用lambda表达式,您可以编写本地函数,这些函数可以作为参数传递或作为函数调用的返回值...

太好了!


1

我无法搜索它,因为它们是特殊字符。

有时候老式的方法是最好的。这个方法对我有效:

  • 启动 Visual Studio 2008 或更高版本
  • 按 F1 键
  • 一旦帮助文档资源管理器出现,请确保左侧窗格中选择了“索引”选项卡
  • 在“查找”字段中输入“=>”
  • 列表中的第一项现在就是您需要的帮助文章。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接