F#提供向下转换类型作为函数参数

丹尼·G

我正在与一些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)
古斯

使用类型参数:

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

这还有一个额外的优点,就是在许多情况下类型推断可以为您推断出该类型,这是一个简单的示例:

let x: int64 option = tryCast "4"

在这里,您无需指定类型,因为编译器知道xtype是option<int64>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章