Jeśli nie ma sensu rzucać obiektu do typ zmiennej (typ nieznany w czasie kompilacji). Cały punkt rzucania polega na określeniu dokładnego typu. Podejrzewam jednak, że zamiast używać obiektu Type
, naprawdę potrzebna jest metoda generyczna lub klasa generyczna. Na przykład:
Public Function DoSomethingGenerically(Of T)(MyParameter As MyType) As T
Return CType(MyParameter.MyProperty, T)
End Function
To metoda naprawdę bezcelowe, ponieważ wszystko, co robi jest odlewana własności i zwraca go jako tego typu, ale to pokazuje, jak można rzucić wpisać T
nie wiedząc, co konkretnie T
dzieje być. Następnie można nazwać tak:
Dim x As New MyType()
Dim y As MyType2 = DoSomethingGenerically(Of MyType2)(x)
To jest dokładnie jak klasa List(Of T)
, i inne podobne klasy generyczne są realizowane. Z wyjątkiem, zamiast tworzyć indywidualny sposób ogólny, oni sprawiają, że cała klasa rodzajowy, na przykład:
Public Class MyList(Of T)
Public Sub Add(item As T)
' ...
End Sub
End Class
'CType' służy do poinformować kompilator, jaki typ obiektu jest, więc' 'type' expression' i musi być znany w czasie kompilacji ** **. Jakiego błędu dostałeś w ogóle? –
I GDZIE będzie przechowywał wynik, jeśli jest nieznany, aż do uruchomienia? W przypadku tego rodzaju konwersji można po prostu polegać na ** System.Convert.ChangeType **. Czy to kolejny problem XY? –
@ TimSchmelter, błąd jest "Typ" objType "nie jest zdefiniowany" – Brij