在C#中,可以使用as
将引用类型值转换为请求的类型或null,这样只需要在使用之前检查转换值是否为null。我怎么在F#中做到这一点?
答案 0 :(得分: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