我想通过使用实际对象的名称来将对象拆箱到其实际类型。
type Employee = {
Id:int
Name:string
}
let defEmployee = {
Id=1
Name="Mahi"
}
//actual object
let actualObject = defEmployee
let empAsObject = actualObject :> obj // type with casted in base class
let actualObject = unbox(empAsObject) //here I am trying to unboxing but not
able to do it.
当我有实际类型的对象运行时但我只有类型/对象的名称时,我可以这样做
答案 0 :(得分:5)
unbox
函数将obj强制转换为类型'T
。要做到这一点,它需要知道要转换为哪种类型。通常,这可以通过来自周围上下文的类型推断来解决,但在这种情况下,编译器没有该信息。因此,您需要提供类型。一种方法是将类型参数显式传递给unbox
:
let actualEmployee = unbox<Employee> empAsObject
请注意,unbox
操作不安全。如果值实际上不是Employee
,它将抛出运行时异常。这是您在决定超出类型系统和框值时所采取的风险。
答案 1 :(得分:4)
一般来说,编译器无法推断出具体的子类型是什么。如果您丢失了类型信息,则必须将其强制退回(冒着抛出异常的风险):
let actualObject = empAsObject :?> Employee