Reflection 如何按类名将对象取消装箱到实际对象中

Reflection 如何按类名将对象取消装箱到实际对象中,reflection,f#,f#-data,Reflection,F#,F# Data,我想通过使用实际对象的名称将对象解除绑定到其实际类型 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 ac

我想通过使用实际对象的名称将对象解除绑定到其实际类型

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.

当我有运行时对象的实际类型时,我可以这样做,但我只有类型/对象的名称

函数
unbox
将对象强制转换为类型
'T
。要做到这一点,它需要知道转换到哪个类型。通常,这可以通过从周围上下文进行类型推断来解决,但在这种情况下,编译器没有这些信息。因此,您需要提供类型。一种方法是显式地将类型参数传递给
unbox

let actualEmployee = unbox<Employee> empAsObject
让actualEmployee=unbox empAsObject

请注意,
unbox
操作不安全。如果该值实际上不是
员工
,它将引发运行时异常。这是您在决定跳出类型系统和框值时所冒的风险。

通常,编译器无法推断具体的子类型。如果丢失了类型信息,则必须强制将其重新输入(冒引发异常的风险):


让actualObject=empAsObject:?>Employee

如果没有要强制转换的类型,您就不能强制转换,如果您不知道类型,您打算用
actualObject
做什么?我已经调用了这个方法moduleInfo.getMethodName(“methodName”).Invoke(null,args),我得到的是返回类型对象类型,我想将对象转换为对象的实际类型。您知道
methodName
的返回类型是什么吗?如果是这样的话,你可以直接投。如果你不知道它是什么,那么你需要解释你试图对结果做什么。我正在创建一个框架,它调用多个方法,并应用所有类型。通过忽略性能,我集中精力编写它。你需要在你的问题中添加更多信息-你到底想用
actualObject
做什么,而你不能?