2016-10-05 97 views
0

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

下面的函数编译,但我得到: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 
+0

您不能使用那样的泛型。如果你有一个通用的方法,你必须提供一个在编译时已知的常量定义类型。在你的例子中,你尝试提供一个在运行时动态解析的类型,这是不可能的。 –

+0

@AlexB。什么是实现这个或类似的首选方法。我想动态确定jsonDecode的类型。我有字符串,我可以查找以确定应用哪种解码(类)。 –

+1

只需使用DeserializeObject的其他重载,如'JsonConvert.DeserializeObject(r.data,DB.ResolveType(r.req_type))' –

回答

1

您不能使用这样的泛型。

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

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

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

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

0

您返回语句似乎是正确的。 但你不能写类似 “DeserializeObject(中DB.ResolveType(r.req_type))(r.data)”

仿制药业务可以有类型作为参数(例如:“DIM P = MyType.MyFunction (的字符串)(参数)“),但不能使用物件(类型”类型“或任何其他类型)而不是类型参数

相关问题