Seq.cast 从对象到字符串的元组值

Seq.cast tuple values from obj to string

做这样的演员表有什么好的和有效的方法?

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

有没有办法将一个元组 "unbox" 变成另一个元组?

你可以写得更好一点:

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模块,但我经常在我的项目中定义一个,包含各种方便的单行代码,如上面的那个。