Wie kann ich eine Typdefinition verwenden, die von einer Funktion zurückgegeben wird? Die folgende Funktion kompiliert, aber ich bekomme: BC30002 "Typ 'DB.ResolveType' ist nicht definiert.", wenn ich versuche, es zu benutzenVorgehensweise: Verwenden Sie eine Typdefinition, die von einer Funktion zurückgegeben wird?
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
Sie können keine Generika wie diese verwenden. Wenn Sie eine generische Methode haben, müssen Sie einen konstanten definierten Typ angeben, der zur Kompilierungszeit bekannt ist. In Ihrem Beispiel versuchen Sie, einen Typ anzugeben, der zur Laufzeit dynamisch aufgelöst wird, was nicht möglich ist. –
@AlexB. Was wäre die bevorzugte Methode, um dies oder Ähnliches zu erreichen? Ich möchte dynamisch bestimmen, welcher Typ zu jsonDecode ist. Ich habe Strings, die ich nachschlagen kann, um zu bestimmen, welche Decodierung (Klasse) anzuwenden ist. –
Verwenden Sie einfach eine andere Überladung von DeserializeObject, wie 'JsonConvert.DeserializeObject (r.data, DB.ResolveType (r.req_type))' –