[英]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 global
的namespace 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.