簡體   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