首页 > 解决方案 > 等效于 C# 类型参数中的 F# _ 通配符

问题描述

F# 允许您让编译器计算出应该是什么类型参数。

let foo = [| 1 |]
let bar = Array.head<_> foo

(您实际上永远不会这样做,您会删除参数,但这只是说明性的)。

C# 中有什么等价的吗?

问题是......我有 F# 代码,它接受字面上 30 个类型参数,从 F# 调用此代码是微不足道的,编译器只是解决它(如果它不能,然后指定 1 个参数和通配符其余的会很好地暗示给编译器做什么),从 C# 调用这段代码是可怕的,因为你必须煞费苦心地计算出参数(如果你完全忽略它们,它会顽固地拒绝推断它们)。

附言

甚至像让 IDE 在 F# 代码中显式指定这些参数这样令人讨厌的 hack,然后可以在很大程度上将其粘贴到 C# 代码中也会有所帮助。

(我明白为什么 C# 的推理较弱,它是生命,但我的例子实际上很机械)

标签: c#f#

解决方案


其实我已经解决了。

如果我用来自特定类型的调用来包装超通用函数并将其写入 F#,然后我可以从我的 C# 代码中调用这个根本不是类型参数的函数,而不是花 15 分钟来尝试解决类型是什么。

代价是拥有一个外部 F# 库的 F# 包装器,但代码很简单。


推荐阅读