F#提供downcast类型作为函数参数

时间:2017-01-06 15:23:53

标签: f#

我正在与一些C#库进行一些接口,需要进行一些对象的转换。我认为可以通过将downcast的类型作为参数传递来解决一些代码重复。

// transform exceptions into Option type
let tryFn fn =
    try Some(fn()) with ex -> None

let tryCastString (o: obj) = tryFn (fun () -> o :?> string)
let tryCastUInt64 (o: obj) = tryFn (fun () -> o :?> uint64)

// I would like to do something like the following
let tryCast (o: obj) (t: type) = tryFn (fun () -> o :?> t)

1 个答案:

答案 0 :(得分:8)

使用类型参数:

let tryCast<'R> (o: obj) = tryFn (fun () -> o :?> 'R)

这有一个额外的好处,在很多情况下,类型推断可以为你推断出这种类型,这里只是一个简单的例子:

let x: int64 option = tryCast "4"

此处您不需要指定类型,因为编译器已知x类型为option<int64>