Je passe différents objets à un sous-programme pour exécuter le même processus mais en utilisant un objet différent à chaque fois. Par exemple, dans un cas, j'utilise un ListView et dans un autre cas, je passe un DropDownList.
Je veux vérifier si l'objet passé est un DropDownList, puis exécuter du code si c'est le cas. Comment puis-je faire cela?
Mon code pour l'instant qui ne fonctionne pas:
Sub FillCategories(ByVal Obj As Object)
Dim cmd As New SqlCommand("sp_Resources_Categories", Conn)
cmd.CommandType = CommandType.StoredProcedure
Obj.DataSource = cmd.ExecuteReader
If Obj Is System.Web.UI.WebControls.DropDownList Then
End If
Obj.DataBind()
End Sub
la source
TypeOf
est probablement une option encore plus simple, au moins en termes de lisibilité du code; J'ai également mis à jour la réponse avec un exemple de cela.Select Case (Obj.GetType())
avec plusieurs cas de test Vs multiplesIF TypeOf Obj is ...
?Quelques détails supplémentaires en relation avec la réponse de Cody Gray. Comme il m'a fallu un certain temps pour le digérer, j'ai pensé que cela pourrait être utile aux autres.
Tout d'abord, quelques définitions:
Bar
est un TypeName dansPublic Class Bar
ou dansDim Foo as Bar
. TypeNames pourrait être vu comme des "étiquettes" utilisées dans le code pour indiquer au compilateur la définition de type à rechercher dans un dictionnaire où tous les types disponibles seraient décrits.System.Type
objets qui contiennent une valeur. Cette valeur indique un type; tout comme unString
prendrait du texte ou unInt
prendrait un nombre, sauf que nous stockons des types au lieu du texte ou des nombres.Type
Les objets contiennent les définitions de type, ainsi que le TypeName correspondant.Deuxièmement, la théorie:
Foo.GetType()
renvoie unType
objet contenant le type de la variableFoo
. En d'autres termes, il vous indique de quoi ilFoo
s'agit.GetType(Bar)
renvoie unType
objet qui contient le type du TypeNameBar
.Dans certains cas, le type d'un objet
Cast
est différent du type à partir duquel l'objet a été instancié pour la première fois. Dans l'exemple suivant, MyObj est unInteger
cast en unObject
:Dim MyVal As Integer = 42 Dim MyObj As Object = CType(MyVal, Object)
Alors, est
MyObj
de typeObject
ou de typeInteger
?MyObj.GetType()
vous dira que c'est unInteger
.Type Of Foo Is Bar
fonctionnalité, qui vous permet de vérifier qu'une variableFoo
est compatible avec un TypeNameBar
.Type Of MyObj Is Integer
etType Of MyObj Is Object
renverra tous les deux Vrai. Dans la plupart des cas, TypeOf indiquera qu'une variable est compatible avec un TypeName si la variable est de ce Type ou d'un Type qui en dérive. Plus d'informations ici: https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/typeof-operator#remarksLe test ci-dessous illustre assez bien le comportement et l'utilisation de chacun des mots-clés et propriétés mentionnés.
ÉDITER
Vous pouvez également utiliser
Information.TypeName(Object)
pour obtenir le TypeName d'un objet donné. Par exemple,la source