如何:使用从函数返回的类型定义



请问如何使用从函数返回的类型定义?

下面的函数编译,但我得到:BC30002"类型"DB。没有定义ResolveType。当我试图使用它

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

不能这样使用泛型。

如果你有一个泛型方法,你必须提供一个在编译时已知的常量定义类型,例如JsonConvert.DeserializeObject(Of String)(data)

在您的示例中,您尝试提供在运行时动态解析的类型,这是不可能的。

如果你想动态解析对象类型,只需使用DeserializeObject的另一个重载,例如

JsonConvert.DeserializeObject(r.data, DB.ResolveType(r.req_type))

您的return语句似乎是正确的。但你不能写"DeserializeObject(Of DB.ResolveType(r.req_type))(r.r data)"

泛型操作可以使用类型作为参数(例如:" Dim p = MyType. ")。MyFunction(of String)(argument)"),但不能使用对象(类型为" type "或任何其他类型)来代替type-argument

相关内容

  • 没有找到相关文章

最新更新