繁体   English   中英

从C#调用F#函数

[英]Calling an F# Function from C#

我看了其他说明,但仍然不知道如何做到这一点。 我有两个项目(C#中的Calculator和F#中的Logic)。 我在计算器中添加了对Logic的引用,以及对FSharp.Core的引用

但是,当我添加该行

float result = Logic.start(formula);

在我的C#项目中,我收到一条错误消息:

“在当前的背景下,Logic的名称并不存在。”

逻辑项目中有一个模块逻辑,所以它应该显示正确吗? 我还缺少什么?

编辑:这是功能定义......

let start formula =
core (List.ofSeq formula) [] []

你不能从C#中引用一个没有任何命名空间的F#模块。 做这样的事情:

// F# project
namespace Some
module Logic =
    let start formula =
.....

或同等学历

// F# project
module Some.Logic
let start formula =
.....

// C# project
.....
Some.Logic.start(formula)

并参考C#项目中的F#项目。

更新 :正如JackP指出的那样,存在另一种替代方案,允许完全避免在F#侧使用显式命名空间。

在C#中,您可以在任何命名空间之外创建一个类,可以通过在其名称前加上global上下文关键字后跟:: operator来引用该类,这是引用默认顶级.NET命名空间的方式 从参考角度看,在任何命名空间之外具有简单名称的F#模块等同于在第一行代码中具有namespace globalnamespace global 将此考虑因素应用于您的案例,您可以选择:

// F# definition
// namespace global is assumed
module Logic
let start formula =
.....

// C# reference
...global::Logic.start(formula)...

关于global::MSDN上可用的Gory详细信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM