関数から返された型定義を使用するにはどうすればよいですか?方法:関数から返された型定義を使用しますか?
以下の関数がコンパイルされますが、私は次のようになります。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に動的に決定したいのですか?私はどのデコード(クラス)を適用するかを決定するために検索できる文字列を持っています。 –
'JsonConvert.DeserializeObject(r.data、DB.ResolveType(r.req_type))' –