F#管道到/来自.net对象

时间:2017-04-11 17:46:48

标签: .net f# piping

我注意到管道进出某些.NET方法很困难。玩具示例

let foo = System.String [| 'a'; 'b'; 'c' |] // works
let foo = [| 'a'; 'b'; 'c' |] |> System.String // fails
// error FS0802: Invalid use of a type name and/or object constructor. 
let foo = System.String <| [| 'a'; 'b'; 'c' |] // fails the same way
let foo = [| 'a'; 'b'; 'c' |] |> new System.String // Fails
// error FS0010: Incomplete structured construct at or before this point in expression

我基本上试图找出何时可以将管道与.NET对象结合使用,何时不能。如果有参考,我很乐意获得链接!

1 个答案:

答案 0 :(得分:2)

至于您对字符串的挂断,以下链接显示对F#4.0中添加了将构造函数作为函数处理的支持

https://fslang.uservoice.com/forums/245727-f-language/suggestions/5663317-allow-to-use-class-constructors-as-functions

另一个使.NET库管道笨拙的常见情况是它们被公开为tupled(而不是curried)函数参数,这可以使部分应用函数到管道通过更痛苦。围绕这些笨重的.NET函数创建curried包装器通常是一个很好的解决方法。