C#方法的含义

时间:2014-11-04 02:01:55

标签: c# syntax

所以我正在看这个C#方法

if (IsInDesignMode)
        {
            // Only runs in design mode
            _dataService.GetMachine(_machines[0].Machine.SerialNumber, (machine, error) => //<-- this is what I am confused about
            {
                SelectedMachine = new MachineViewModel(machine);
            });
        }

我理解if()语句和SelectedMachine = new MachineViewModel(machine);行。 但我对评论说的话感到困惑。

_dataService调用传递GetMachine param和_machines[0].Machine.SerialNumber的{​​{1}}方法。这不是一个“平等或不到”的陈述吗? 它有点像我的Javascript代码......?

方法是否说,

(machine, error) => {}

任何人都可以解释这是If IsInDesignMode { dataservice.GetMachine(machine serial number, machine error is new MachineViewModel) } 的内容吗?非常感谢你!

3 个答案:

答案 0 :(得分:3)

您要问的部分是使用lambda表达式的匿名方法。它通常用于回调。

当你写这个

(machine, error) => { SelectedMachine = new MachineViewModel(machine); }

您正在创建一个没有名称的函数(因此不能像名称那样重复使用,就像常规方法一样)。在需要生成一段只需要使用一次的可调用代码时,它非常方便,例如:在回调中。

请注意,该方法不必是匿名的:您可以创建一个等效的命名方法。但是,由于匿名方法是在使用它的方法的上下文中构建的,因此上下文中的变量可用。您的匿名方法会指定SelectedMachine,这可能是您班级的属性。同样,匿名方法也可以访问局部变量,这是一种非常强大的机制,可以将状态和一段代码组合在一起运行。

答案 1 :(得分:1)

更准确。它是一个使用lambda表达式的匿名方法。 你要问的标志&#39; =&gt; {}&#39;被称为lambda表达式。 通常它与委托类型一起使用,如func,Action,谓词等。 看看上面的类型,让自己更清楚。

答案 2 :(得分:0)

这是一个lambda表达式。有关详细信息,请查看此页面:http://msdn.microsoft.com/en-us/library/bb397687.aspx