2010-10-14 8 views
0

J'ai créé quelques fonctions simples dans VB.NET qui retournent simplement un contrôle d'un certain type que je connais déjà, comme HtmlInputHidden, Label, etc. Cela signifie que chaque des fonctions est créé uniquement pour ce but particulier.Fonction générique VB.NET pour retourner un contrôle

Ce que je voudrais faire est de combiner toutes ces fonctions en une seule fonction en utilisant des génériques. Les choses communes partagées par chacune des fonctions sont un Id de contrôle et un type de contrôle.

Ce que j'ai à ce jour est:

Public Function GetControl(Of T)(ByVal ctrlId As String) As T 
     Dim ctrl As Control = Me.FindControl(ctrlId) 

     If (Not ctrl Is Nothing) Then 
      GetControl = CType(ctrl, T) 
     Else 
      GetControl = Nothing 
     End If 
    End Function 

Mais la ligne "GetControl = CType (ctrl, T)" me donne une erreur de compilation:

Value of type 'System.Web.UI.Control' cannot be converted to 'T' 

Ceci est. NET Framework 2.0.

Toute idée est très appréciée.

John

Répondre

2

Si vous changez votre fonction à ceci, cela fonctionnera.

Public Function GetControl(Of T)(ByVal ctrlId As String) As T 
    Dim ctrl As Object = Me.FindControl(ctrlId) 

    If (Not ctrl Is Nothing) Then 
     return CType(ctrl, T) 
    Else 
     return Nothing 
    End If 
End Function 

Cela est dû au fait que le type doit être d'une manière qu'il peut convertir, comme si vous convertissez à un contrôle, il serait le type transtypage ascendant en béton.

Maintenant, assurez-vous de garder à l'esprit que vous pourriez jeter des exceptions ici si vous envoyez l'identifiant du mauvais type, etc.

+0

C'est tout! Merci beaucoup pour la réponse rapide. – John

+0

Pas de problème! Heureux que je pourrais aider –

+0

Pourrait utiliser TypeOf et DirectCast pour éviter toute erreur. –

0

Voici une façon plus concise de l'ajouter - vous ne pouvez pas l'appeler en utilisant un type qui n'hérite pas de Control:

Public Function GetControl(Of T As Control)(ByVal ctrlId As String) As T 
    Dim ctrl As Control = Me.FindControl(ctrlId) 

    If (Not ctrl Is Nothing) Then 
     GetControl = CType(ctrl, T) 
    Else 
     GetControl = Nothing 
    End If 
End Function 
Questions connexes