Cast impossible d'un objet(of T)
Bonjour,
J'ai créé un objet_data(Of T) contenant un nom et une variable de type T (integer, float, string...)
A l'aide d'un ConcurrentDictionary, je recherche un objet depuis son nom.
Je parviens à le trouver mais pas à le caster convenablement
Pour expliquer, voici mon code est en rouge les lignes me posant problème :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| 'ma classe de base
Public MustInherit Class objet_data
Public ReadOnly sName As String
Protected Sub New(ByVal name As String)
Me.sName = name
End Sub
End Class
'Mon_objet_data mais avec une variable _obj_Value de type non connu (integer, string, float, double)
Public Class objet_data(Of T) : Inherits objet_data
Private _obj_Value As T
Public Sub New(ByVal name As String)
MyBase.New(name)
End Sub
End Class
#Region "Le référentiel de mes objets"
Private Interface I_Object_Data_Repository ' Déclaration de mon interface
Sub Add(Of T)(dataRef As objet_data(Of T)) ' Ajoute un objet DATA dans le referentiel (dictionnaire)
Function [Get](Of T)(sName As String) As objet_data(Of T) ' Retourne un objet data trouvé depuis son nom et son type
Function [Get](sName As String, type As Type) As objet_data 'Retourne un objet data(of T) trouvé depuis son nom seul
End Interface
Private Class Object_Data_Repository
Implements I_Object_Data_Repository
Protected ReadOnly Dictionnaire_de_Mes_objets_data As New ConcurrentDictionary(Of String, Object)()
'Ajoute un objet DATA dans le referentiel (dictionnaire)
Private Sub Add(Of T)(ByVal Current_objet_data As objet_data(Of T)) Implements I_Object_Data_Repository.Add
Dictionnaire_de_Mes_objets_data.TryAdd(Current_objet_data.sName, Current_objet_data)
End Sub
'Retourne un objet data trouvé depuis son nom et son type
Private Function Get_a_Objet_data(ByVal sName As String, type As Type) As objet_data Implements I_Object_Data_Repository.Get
Dim my_searched_data As Object = Nothing
Dictionnaire_de_Mes_objets_data.TryGetValue(sName, my_searched_data)
Return TryCast(my_searched_data, objet_data)
End Function
'Retourne un objet data(of T) trouvé depuis son nom seul
Private Function Get_a_Objet_data(Of T)(ByVal sName As String) As objet_data(Of T) Implements I_Object_Data_Repository.Get
Dim my_searched_data As Object = Nothing
Dictionnaire_de_Mes_objets_data.TryGetValue(sName, my_searched_data)
'ICI my_searched_data a bien été trouvé
'Par contre impossible de le caster en objet_data(Of T). Voici les deux tentatives :
Return TryCast(my_searched_data, objet_data(Of T)) "==> return NOTHING"
Return CType(my_searched_data, objet_data(Of T)) "==> génère une erreur Impossible d'effectuer un cast d'un objet de type 'objet_data`1[System.Single]' en type 'objet_data`1[System.Single[]]'."
End Function
End Class
#End Region |
L'erreur indique que je tente de caster du single en tableau de single (single()) mais je ne comprend pas pourquoi.
Voyez-vous ce qui cloche ?
Merci pour votre aide
Dan
Avez-vous une idée du probléme