F# - 调用具有重载和参数的C#方法

3

我不知道其他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个回答

5

然后...我真是自己给自己挖了个坑。
TqlForBidAskTrade("字符串", Nullable()) 是可以工作的,但在我随意修改代码时,把语法搞砸了。


请注意,new Nullable<int>() 也可以工作。也就是说,如果您添加了类型参数,则还需要显式使用 new - kvb
@kvb:Nullable<int>()——不使用new也可以(甚至是Nullable<_>())。 - Daniel
@kvb:进一步思考后,我觉得你搞反了:如果你使用new,你必须提供类型参数。 - Daniel
2
@Daniel - 哎呀,你说得完全正确。我基于原始问题中的代码无法运行的假设发表了评论(似乎并非如此)。 - kvb

5

你找到了解决方案,但是需要添加一些解释:

C#编译器对Nullable<T>进行了特殊处理。一个例子是null可以替换为new Nullable<T>()。这里有另一个例子

在F#中,Nullable<'T>只是另一种类型:没有语法糖,也没有魔法。 option<'T>是最接近Nullable对应的类型,并且用于可选参数。如果在F#中定义函数,它可能会像这样:

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

T.TqlForBidAskTrade("foo")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接