我正在审核Microsoft Azure Training Kit中的“练习1:构建您的第一个Windows Azure应用程序”,并遇到了一个有点不清楚的代码片段。
内置文档会跳过解释这一点,我不清楚这个单一的复合语句中的以下内容:
=>
表达式
configName
和configSetter
在此语句之前未初始化(?)这里有人可以帮我理解吗?
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
Microsoft.WindowsAzure.CloudStorageAccount.SetConfigurationSettingPublisher(
(configName, configSetter) =>
{
configSetter(RoleEnvironment.GetConfigurationSettingValue(configName));
});
}
由于
答案 0 :(得分:1)
那是" lambda,"有时被称为"匿名函数。"请参阅http://msdn.microsoft.com/en-us/library/bb397687.aspx。
你看到的是这样的简写(如果我有些错误的话,道歉):
void myPublisher(string configName, Func<string, bool> configSetter)
{
configSetter(RoleEnvironment.GetConfigurationSettingValue("configName"));
}
...
Microsoft.WindowsAzure.CloudStorageAccount.SetConfigurationSettingPublisher(myPublisher);
[编辑]
在Windows Azure中,当您执行CloudStorageAccount.FromConfigurationSetting("foo")
之类的操作时,配置设置发布者会运行。在这种情况下,它从Windows Azure的配置设置中读取配置设置"foo"
(而不是,例如,web.config
)。
答案 1 :(得分:1)
它只是lambda 它定义了一个“匿名”方法,并将其作为委托(对函数调用的引用)参数传递。
“=&gt;” 中将匿名方法参数与方法体分开 configName和configSetter是方法的参数,它们的类型是从接受和定义方法的代码中推断出来的,聪明的呃?
这里只是用来保持代码简洁,因为你可以定义一个真正的方法来完成同样的工作,但这样代码就更小了,并且只有一个命名方法少了。
[编辑]
此处似乎用于控制CloudStorageAccount如何读取设置。 即lambda将配置项的读取指向RoleEnvironment类以从Azure角色的服务配置中读取..但是可以将其更改为从其他位置读取它们。