2013-02-22 21 views
3

不知道如何的30篇其他文章已經設法幫不了我這裏,但我正在用C#DLL與這些重載交流#方法:F# - 調用帶有過載,而params

function TqlForBidAskTrade(string, int?, params string[]) 
function TqlForBidAskTrade(string[], int?, params string[]) 

我可以調用這個方法與我想在C#中的參數像這樣:

TqlForBidAskTrade("string", null) 

什麼是在F#中的等效?我似乎無法得到任何東西來編譯。我已經試過:

TqlForBidAskTrade("string", null) 
TqlForBidAskTrade("string", Nullable<int>()) 
TqlForBidAskTrade("string", Nullable<int>(), null) 
TqlForBidAskTrade("string", Nullable<int>(), []) 
TqlForBidAskTrade("string", Nullable<int>(), ["doodah"]) 
TqlForBidAskTrade("string", 4, ["doodah"]) 

它肯定看起來像瓦特/所有的類似請求我應該過這個迷迷糊糊的,但我一直在尋找一個小時。

回答

5

你找到了解決辦法,但要加一些解釋:

的C#編譯器將Nullable<T>特別。一個例子是null可以代替new Nullable<T>()。這裏是another example

在F#中,Nullable<'T>只是另一種類型:沒有糖,沒有魔法。 option<'T>是與Nullable對應物最接近的東西,用於optional parameters。如果在F#中定義,您的函數可能如下所示:

type T = 
    static member TqlForBidAskTrade(s:string, ?n:int, ?args:string[]) =() 

T.TqlForBidAskTrade("foo") 
5

...臉掌。
TqlForBidAskTrade(「string」,Nullable())確實有效,在我的隨機代碼修補中,我搞砸了語法。

+0

請注意'new Nullable ()'也可以。也就是說,如果你添加了類型參數,你還需要明確地使用'new'。 – kvb 2013-02-22 21:45:09

+0

@kvb:'Nullable ()' - 沒有'new'-works too(或者甚至可以爲Nullable <_>()')。 – Daniel 2013-02-22 21:58:01

+0

@kvb:在進一步的思考中,我認爲你已經開始了:如果你使用'new',你必須提供類型參數。 – Daniel 2013-02-22 22:00:31