所以我正在看这个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)
}
的内容吗?非常感谢你!
答案 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