2016-10-05 94 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 (的字符串)(參數)「),但不能使用物件(類型」類型「或任何其他類型)而不是類型參數

相關問題