如何:使用从函数返回的类型定义?
How To: Use a Type definition returned from a function?
请问如何使用从函数返回的类型定义?
下面的函数可以编译,但是我得到:BC30002 "Type 'DB.ResolveType' is not defined." 当我尝试使用它时
Public NotInheritable Class DB
Public Shared Function ResolveType(type As String) As Type
Select Case type
Case "Stop-Action-Request" : Return GetType(cheque_action)
Case "Cheque-Book-Request" : Return GetType(cheque_book_request)
Case "Confirm-Action-Request" : Return GetType(cheque_action)
Case "FX-Transfer-Request" : Return GetType(cheque_action)
Case "Mobile-Banking-Request" : Return GetType(mobile_banking_request)
Case "SMS-Alerts-Request" : Return GetType(sms_alert_request)
End Select
Return Nothing
End Function
End Class
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Try
Dim d = Request.Form("payload")
Dim r = JsonConvert.DeserializeObject(Of request)(d)
** this line fails: **
Dim p = JsonConvert.DeserializeObject(Of DB.ResolveType(r.req_type))(r.data)
DB.new_request(r.req_type, r.src, r.data)
Catch ex As Exception
End Try
End Sub
您的 return-陈述似乎是正确的。
但是你不能写像 "DeserializeObject(Of DB.ResolveType(r.req_type))(r.data)"
这样的东西
泛型操作可以将 types 作为参数(例如:“ Dim p = MyType.MyFunction(of String)(argument)”)但是你不能使用 obbject("Type" 类型或任何其他类型)而不是类型参数
你不能那样使用泛型。
如果你有一个泛型方法,你必须提供一个在编译时已知的常量定义类型,例如JsonConvert.DeserializeObject(Of String)(data)
在您的示例中,您尝试提供一种在 运行 时间内动态解析的类型,这是不可能的。
如果要动态解析对象类型,只需使用 DeserializeObject
的其他重载,例如
JsonConvert.DeserializeObject(r.data, DB.ResolveType(r.req_type))
请问如何使用从函数返回的类型定义?
下面的函数可以编译,但是我得到:BC30002 "Type 'DB.ResolveType' is not defined." 当我尝试使用它时
Public NotInheritable Class DB
Public Shared Function ResolveType(type As String) As Type
Select Case type
Case "Stop-Action-Request" : Return GetType(cheque_action)
Case "Cheque-Book-Request" : Return GetType(cheque_book_request)
Case "Confirm-Action-Request" : Return GetType(cheque_action)
Case "FX-Transfer-Request" : Return GetType(cheque_action)
Case "Mobile-Banking-Request" : Return GetType(mobile_banking_request)
Case "SMS-Alerts-Request" : Return GetType(sms_alert_request)
End Select
Return Nothing
End Function
End Class
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Try
Dim d = Request.Form("payload")
Dim r = JsonConvert.DeserializeObject(Of request)(d)
** this line fails: **
Dim p = JsonConvert.DeserializeObject(Of DB.ResolveType(r.req_type))(r.data)
DB.new_request(r.req_type, r.src, r.data)
Catch ex As Exception
End Try
End Sub
您的 return-陈述似乎是正确的。 但是你不能写像 "DeserializeObject(Of DB.ResolveType(r.req_type))(r.data)"
这样的东西泛型操作可以将 types 作为参数(例如:“ Dim p = MyType.MyFunction(of String)(argument)”)但是你不能使用 obbject("Type" 类型或任何其他类型)而不是类型参数
你不能那样使用泛型。
如果你有一个泛型方法,你必须提供一个在编译时已知的常量定义类型,例如JsonConvert.DeserializeObject(Of String)(data)
在您的示例中,您尝试提供一种在 运行 时间内动态解析的类型,这是不可能的。
如果要动态解析对象类型,只需使用 DeserializeObject
的其他重载,例如
JsonConvert.DeserializeObject(r.data, DB.ResolveType(r.req_type))