如何通过类的名称将unbox对象转换为实际对象
问题描述:
我想通过使用实际对象的名称将对象拆箱到其实际类型。如何通过类的名称将unbox对象转换为实际对象
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
功能投下的OBJ一种类型'T
的名称。要做到这一点,它需要知道投射到哪种类型。通常这可以通过周围环境的类型推断来解决,但在这种情况下,编译器没有这些信息。因此您需要提供类型。这样做的一种方式是类型参数明确地传递给unbox
:
let actualEmployee = unbox<Employee> empAsObject
注意,unbox
操作是不安全的。如果该值实际上不是Employee
,则会引发运行时异常。当您决定跳出类型系统和框值时,这是您要承担的风险。
答
一般来说,编译器无法推断出具体的子类型是什么。如果你失去了类型信息,你必须将其转换回(在抛出异常的风险):
let actualObject = empAsObject :?> Employee
不能投放,而一个类型强制转换为,你有什么与做规划'actualObject'如果你不知道类型? – Lee
我已经调用了这个方法moduleInfo.GetMethod(“methodName”)。Invoke(null,args),我得到了返回类型的对象类型,我想将对象转换为实际的对象类型。 –
你知道'methodName'的返回类型是什么吗?如果是这样,你可以投。如果你不知道它是什么,那么你需要解释你想要对结果做什么。 – Lee