F# 为什么我不能使用 :? F# 交互中的运算符?

F# Why can't I use the :? operator in F# interactive?

我正在尝试检查变量是否属于特定类型,如下所示:

let s = "abc"
let isString = s :? string

但在 F# 交互中,出现以下错误:

error FS0016: The type 'string' does not have any proper subtypes and cannot be used as the source of a type test or runtime coercion.

为什么会这样?我希望 isString 是一个布尔值。

因为你正在尝试密封类型。

试试这个:

let s = box "abc"
let isString = s :? string

对密封类型进行这种强制测试没有意义,因为它们不能有任何子类型,这就是错误消息告诉您的内容。

box 关键字将始终 return 一个对象,无论源是引用类型(在本例中)还是值类型,在这种情况下它将“装箱”它。