F# - 使用重载和参数调用c#方法

时间:2013-02-22 21:18:22

标签: f#

不知道其他30篇文章是如何在这里帮助我的,但是我正在使用c#dll来处理这些重载:

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"])

看起来好像我应该偶然发现所有相似的请求,但我一直在寻找一个小时。

2 个答案:

答案 0 :(得分:5)

和......面掌 TqlForBidAskTrade(“string”,Nullable())确实有效,在我的随机代码修补中,我搞砸了语法。

答案 1 :(得分: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")