Как я могу использовать определение типа, возвращаемое функцией?Практическое руководство. Использование определения типа, возвращаемого функцией?
Функция ниже компилируется, но я получаю: 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
Вы не можете использовать такие дженерики. Если у вас есть общий метод, вы должны указать постоянный определенный тип, который известен во время компиляции. В вашем примере вы пытаетесь предоставить тип, который динамически разрешается во время выполнения, что невозможно. –
@AlexB. что было бы предпочтительным методом достижения этого или подобного. Я хочу динамически определить, какой тип для jsonDecode. У меня есть строки, которые я могу найти, чтобы определить, какое декодирование (класс) применять. –
Просто используйте другую перегрузку DeserializeObject, например 'JsonConvert.DeserializeObject (r.data, DB.ResolveType (r.req_type))' –