2016-10-05 14 views
0

関数から返された型定義を使用するにはどうすればよいですか?方法:関数から返された型定義を使用しますか?

以下の関数がコンパイルされますが、私は次のようになります。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 
+0

このようなジェネリックは使用できません。ジェネリックメソッドがある場合は、コンパイル時に知られている定数定義型を指定する必要があります。あなたの例では、不可能な実行時に動的に解決される型を提供しようとします。 –

+0

@AlexB。これを達成するための好ましい方法は何か、それと同様です。どのタイプをjsonDecodeに動的に決定したいのですか?私はどのデコード(クラス)を適用するかを決定するために検索できる文字列を持っています。 –

+1

'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

それを使用してみてください。 「薄暗いP = MyType.MyFunction: は、しかし、あなたは "DeserializeObject(うちDB.ResolveType(r.req_type))(r.data)"

ジェネリック操作ができ種類の引数として(例のようなものを書くことはできません(引数)(文字列の)」)しかし、あなたは(タイプのobbject使用することはできません 『タイプ』またはその他のタイプ)の代わりに、あなたはそのようなジェネリック医薬品を使用することはできません型引数

関連する問題