从F调用C#函数#
我试图从f调用这个函数# 函数签名为:从F调用C#函数#,c#,f#,C#,F#,我试图从f调用这个函数# 函数签名为: CloudStorageAccount.SetConfigurationSettingPublisher (Action<string, Func<string, bool>>) : unit 而在F#中,我不得不这样做: CloudStorageAccount.SetConfigurationSettingPublisher((configName,
CloudStorageAccount.SetConfigurationSettingPublisher
(Action<string, Func<string, bool>>) : unit
而在F#中,我不得不这样做:
CloudStorageAccount.SetConfigurationSettingPublisher((configName,
configSettingPublisher) =>
{
string configValue = "something"
configSettingPublisher(configValue);
});
let myPublisher configName (setter:Func<string, bool>) =
let configValue = RoleEnvironment.GetConfigurationSettingValue(configName)
setter.Invoke(configName) |> ignore
let act = new Action<string, Func<string, bool>>(myPublisher)
CloudStorageAccount.SetConfigurationSettingPublisher(act)
CloudStorageAccount.SetConfigurationSettingPublisher(fun configName setter ->
let configValue = RoleEnvironment.GetConfigurationSettingValue(configName)
setter.Invoke(configName) |> ignore)
让myPublisher配置名称(setter:Func)=
让configValue=RoleEnvironment.GetConfigurationSettingValue(configName)
setter.Invoke(configName)|>忽略
let act=新操作(myPublisher)
CloudStorageAccount.SetConfigurationSettingPublisher(act)
这可以用f#写得更简洁些吗 F#自动转换使用fun…->创建的lambda函数代码>语法到.NET委托类型,如操作
。这意味着您可以直接使用lambda函数作为SetConfigurationSettingPublisher
的参数,如下所示:
CloudStorageAccount.SetConfigurationSettingPublisher((configName,
configSettingPublisher) =>
{
string configValue = "something"
configSettingPublisher(configValue);
});
let myPublisher configName (setter:Func<string, bool>) =
let configValue = RoleEnvironment.GetConfigurationSettingValue(configName)
setter.Invoke(configName) |> ignore
let act = new Action<string, Func<string, bool>>(myPublisher)
CloudStorageAccount.SetConfigurationSettingPublisher(act)
CloudStorageAccount.SetConfigurationSettingPublisher(fun configName setter ->
let configValue = RoleEnvironment.GetConfigurationSettingValue(configName)
setter.Invoke(configName) |> ignore)
具有多个参数的函数可以转换为具有多个参数的委托(参数不应被视为元组)。setter
的类型仍然是Func
而不是简单的F#函数,因此需要使用Invoke
方法调用它(但这应该不是什么大问题)
如果要将setter
从Func
转换为F#functionstring->bool
,可以定义一个简单的活动模式:
let (|Func2|) (f:Func<_, _>) a = f.Invoke(a)
请注意,“自动转换”仅适用于方法参数。