在 C# 中,可以使用as
将引用类型值转换为请求的类型或 null,因此只需要在使用之前检查转换值是否为 null。我如何在 F# 中做到这一点?
问问题
95 次
1 回答
4
您可以使用模式匹配和:? <type> as <value>
模式。F# 不喜欢值,因此如果值的类型不正确(或者之前为 null),null
它不会自动为您提供。null
您可以null
在第二个分支中处理其他类型的值:
let o = box (System.Random())
match o with
| :? System.Random as rnd -> rnd.Next()
| _ -> -1
如果你真的想获得null
价值,你可以使用Unchecked.defaultof
,但这可能不是一个好主意,它可能会导致错误:
let castAs<'T> (o:obj) =
match o with :? 'T as t -> t | _ -> Unchecked.defaultof<'T>
castAs<System.Random> null // = null
castAs<System.Random> "hi" // = null
castAs<System.Random> (box (System.Random())) // = random
于 2013-09-28T02:24:33.950 回答