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