使用来自 f# 的多个参数执行 c# 方法
execute c# method with multiple parameters from f#
我是 F# 的新手,我正在尝试执行一个从 F# 接受多个参数的静态 C# 函数 file/code。
我有一个包含 C# 项目和 F# 项目的解决方案。
C# 项目
C# 文件中的代码:
using ...
namespace Factories
{
public static class FruitFactory
{
public static string GiveMe(int count, string fruitname)
{
...
...
return ... (string) ...
}
}
}
F# 项目
F# 文件中的代码:
open System
open Factories
[<EntryPoint>]
let main argv =
let result = FruitFactory.GiveMe 2 "Apples"
printfn "%s" result
printfn "Closing Fruit Factory!"
0
从上面的代码中,我得到以下代码的错误 let result = FruitFactory.GiveMe 2 "Apples"
错误 1:
Program.fs(6, 37): [FS0001] This expression was expected to have type
'int * string'
but here has type
'int'
错误 2:
Program.fs(6, 18): [FS0003] This value is not a function and cannot be applied.
C# 函数是非柯里化的,因此您必须像调用元组一样调用它,如下所示:FruitFactory.GiveMe(2, "Apples")
.
如果您真的想创建一个可以使用 F# 中的柯里化参数调用的 C# 函数,您必须分别处理每个参数。不漂亮,但是可以这样做:
C# 项目
using Microsoft.FSharp.Core;
public static class FruitFactory
{
/// <summary>
/// Curried version takes the first argument and returns a lambda
/// that takes the second argument and returns the result.
/// </summary>
public static FSharpFunc<string, string> GiveMe(int count)
{
return FuncConvert.FromFunc(
(string fruitname) => $"{count} {fruitname}s");
}
}
F# 项目
然后您可以在 F# 中以您想要的方式调用它:
let result = FruitFactory.GiveMe 2 "Apple"
printfn "%s" result
多参数 .NET 方法在 F# 中显示为具有元组参数的方法:
let result = FruitFactory.GiveMe(2, "Apples")
我是 F# 的新手,我正在尝试执行一个从 F# 接受多个参数的静态 C# 函数 file/code。
我有一个包含 C# 项目和 F# 项目的解决方案。
C# 项目
C# 文件中的代码:
using ...
namespace Factories
{
public static class FruitFactory
{
public static string GiveMe(int count, string fruitname)
{
...
...
return ... (string) ...
}
}
}
F# 项目
F# 文件中的代码:
open System
open Factories
[<EntryPoint>]
let main argv =
let result = FruitFactory.GiveMe 2 "Apples"
printfn "%s" result
printfn "Closing Fruit Factory!"
0
从上面的代码中,我得到以下代码的错误 let result = FruitFactory.GiveMe 2 "Apples"
错误 1:
Program.fs(6, 37): [FS0001] This expression was expected to have type
'int * string'
but here has type
'int'
错误 2:
Program.fs(6, 18): [FS0003] This value is not a function and cannot be applied.
C# 函数是非柯里化的,因此您必须像调用元组一样调用它,如下所示:FruitFactory.GiveMe(2, "Apples")
.
如果您真的想创建一个可以使用 F# 中的柯里化参数调用的 C# 函数,您必须分别处理每个参数。不漂亮,但是可以这样做:
C# 项目
using Microsoft.FSharp.Core;
public static class FruitFactory
{
/// <summary>
/// Curried version takes the first argument and returns a lambda
/// that takes the second argument and returns the result.
/// </summary>
public static FSharpFunc<string, string> GiveMe(int count)
{
return FuncConvert.FromFunc(
(string fruitname) => $"{count} {fruitname}s");
}
}
F# 项目
然后您可以在 F# 中以您想要的方式调用它:
let result = FruitFactory.GiveMe 2 "Apple"
printfn "%s" result
多参数 .NET 方法在 F# 中显示为具有元组参数的方法:
let result = FruitFactory.GiveMe(2, "Apples")