Seq.cast元组值从obj到string

时间:2016-07-27 13:42:17

标签: casting f# tuples boxing seq

像这样做演员的好方法和工作方式是什么?

seq { yield (box "key", box "val") }
|> Seq.cast<string*string>

因为这看起来非常难看:

seq { yield (box "key", box "val") }
|> Seq.map (fun (k,v) -> k.ToString(), v.ToString())

以及:

seq { yield (box "key", box "val") }
|> Seq.map (fun (k,v) -> unbox<string>(k), unbox<string>(v)) 

有没有办法去&#34; unbox&#34;一个元组进入另一个元组?

1 个答案:

答案 0 :(得分:8)

你可以把它写得更好:

seq { yield (box "key", box "val") }
|> Seq.map (fun (k, v) -> string k, string v)

但是,想象一下,你有一个Tuple2模块:

module Tuple2 =
    // ... other functions ...

    let mapBoth f g (x, y) = f x, g y

    // ... other functions ...

使用这样的mapBoth函数,您可以将演员表编写为:

seq { yield (box "key", box "val") } |> Seq.map (Tuple2.mapBoth string string)

FSharp.Core 中没有Tuple2模块,但我经常在我的项目中定义一个模块,包含各种方便的单行程序,如上图所示。