2
我有一個定義模塊的F#庫。模塊內部定義了2種類型。我正在從C#項目訪問庫(目前它只是一個測試項目,儘管這可能沒有關係)。在F#模塊中定義了兩種類型,但只有一種在C#中可見#
我可以訪問C#中的其中一個類型,但另一個不可用。
我下面的F#代碼:
module Stock
open FSharp.Data
open InstrumentQueryBuilder
type Stock = CsvProvider<"..\prototype_historical_data.csv">
type StockData(symbol) =
member this.Symbol = symbol
member private this.QueryBuilder = new InstrumentQueryBuilder(this.Symbol)
member this.LoadData() =
this.QueryBuilder.HistoricalData() |> Stock.Load
// more member definitions here...
從C#我可以看到StockData
但不Stock
。來自FSharp.Data的Stock
是CsvProvider
。在我的C#代碼中,我引用了FSharp.Data和FSharp.Core。
在C#中使用StockData
是如此簡單:
var stockData = new Stock.StockData("SPY");
但是,如果我爲Stock
做同樣的它顯示了一個編譯時錯誤。任何建議如何訪問Stock
類型或解釋爲什麼這是不可能的?
'Stock'類型是一種提供的類型:它來自F#類型的提供者。類型提供程序由F#編譯器運行,並構造一個類型並將其交給編譯器。因此,如果你沒有運行F#編譯器(因爲你在做C#工作),在我看來,類型提供程序不會運行,因此庫存類型將不可用。 OTOH,我想這些DLL會包含'Stock'類型,所以這個解釋可能是錯誤的。但我最好的猜測是,答案歸結爲「類型提供者是特殊的」。 – rmunn
可能的[如何創建可以從C#使用的F#類型提供程序?]的重複項(http://stackoverflow.com/questions/12118866/how-do-i-create-an-f-type-provider-那可以使用從c) –
@rmunn您的評論對我有意義。我同意問題必須與類型提供者。如果你做出答案,我會很樂意接受。 – PiotrWolkowski