操作方法:使用函数返回的Type定义?

时间:2016-10-05 05:56:55

标签: .net reflection gettype

请问如何使用函数返回的Type定义?

下面的函数编译,但我得到: BC30002" Type' 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

2 个答案:

答案 0 :(得分:1)

你不能使用那样的泛型。

如果您有通用方法,则必须提供在编译时已知的常量定义类型,例如: JsonConvert.DeserializeObject(Of String)(data)

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

如果您想要动态解析对象类型,请使用DeserializeObject的其他重载,例如

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

答案 1 :(得分:0)

你的回复陈述似乎是正确的。 但你不能写像" DeserializeObject(Of DB.ResolveType(r.req_type))(r.data)"

泛型操作可以将 types 作为参数(例如:" Dim p = MyType.MyFunction(String)(参数)")但是你不能使用 obbject (类型" Type"或任何其他类型)而不是type-argument