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

时间:2010-04-28 07:17:07

标签: c# .net

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

什么是=> ? 它叫什么名字?你能给我一个链接吗? 我无法搜索它,因为它们是特殊字符。

代码:

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

3 个答案:

答案 0 :(得分:14)

这是lambda expression

如果您熟悉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表达式可以转换为expression trees以及委托。
  • Lambda表达式有许多快捷方式,可以使它们更简洁:

    • 如果编译器可以推断参数类型,则无需指定它们
    • 如果正文是单个语句,则不需要将其放在大括号中,并且可以省略return语句的“return”部分
    • 如果您有一个带有推断类型的参数,则可以错过括号

    将这些放在一起,你可以得到:

    IEnumerable<string> names = people.Select(person => person.Name);
    
  • Lambda表达式不支持支持“我不关心有多少参数”的匿名方法形式,例如

    EventHandler x = delegate { Console.WriteLine("I was called"); };
    

答案 1 :(得分:11)

Lambda operator

  

lambda表达式是anonymous function,可用于创建delegatesexpression tree类型。通过使用lambda表达式,您可以编写本地函数,这些函数可以作为参数传递或作为函数调用的值返回...

好哇!

答案 2 :(得分:1)

  

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

有时老式的方式是最好的。这对我有用:

  • 启动Visual Studio 2008或更高版本
  • 点击F1
  • 启动帮助文档资源管理器后,确保在左侧窗格中选择了Index选项卡
  • 在查找字段
  • 中输入=>
  • 列表中的第一项现在是您需要的帮助文章。