Comment vérifier si un objet est d'un certain type
Je suis de passage d'objets divers à un sous-programme à exécuter le même processus, mais en utilisant un objet différent à chaque fois. Par exemple, dans un cas, je suis l'aide d'une ListView et dans un autre cas, je suis de passage d'un DropDownList.
Je veux vérifier si l'objet est transmis est un DropDownList, puis d'exécuter du code si il est. Comment puis-je faire cela?
Mon code si loin, 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
InformationsquelleAutor Leah | 2011-07-05
Vous devez vous connecter pour publier un commentaire.
Dans VB.NET, vous devez utiliser le
GetType
méthode pour récupérer le type d'une instance d'un objet, et leGetType()
de l'opérateur pour récupérer le type d'un autre type connu.Une fois que vous avez les deux types, il vous suffit de les comparer à l'aide de la
Is
opérateur.De sorte que votre code doit effectivement être écrit comme ceci:
Vous pouvez également utiliser le
TypeOf
de l'opérateur au lieu de laGetType
méthode. Notez que ce test si votre objet est compatible avec un type donné, non pas que c'est le même type. Qui ressemblerait à ceci:Totalement banal, sans importance pinaille: Traditionnellement, les noms de paramètres sont en camelcase (ce qui signifie qu'ils commencent toujours par une minuscule) lors de l'écriture .NET code (soit VB.NET ou C#). Cela les rend faciles à distinguer d'un coup d'oeil dans les classes, les types, les méthodes, etc.
TypeOf
est probablement encore plus simple, au moins en termes de lisibilité du code; j'ai mis à jour la réponse avec un exemple, trop.Select Case (Obj.GetType())
avec de multiples cas de test Vs plusieursIF TypeOf Obj is ...
?Un peu plus de détails en rapport avec l'intervention de Cody Gris. Comme il m'a fallu un certain temps pour digérer tout ça je pensais qu'il pourrait être utile à d'autres.
D'abord, quelques définitions:
Bar
est un TypeName dansPublic Class Bar
, ou dansDim Foo as Bar
. TypeNames pourraient être considérés comme des "étiquettes" utilisé dans le code pour indiquer au compilateur le type de définition à rechercher dans un dictionnaire où tous les types disponibles pourraient être décrits.System.Type
des objets qui contiennent une valeur. Cette valeur indique un type; tout comme unString
serait prendre un certain texte ou unInt
serait prendre un certain nombre, à l'exception de nous de stocker des types plutôt que du texte ou des chiffres.Type
objets contiennent les définitions de type, ainsi que son correspondant TypeName.Seconde, la théorie de l':
Foo.GetType()
renvoie uneType
objet qui contient le type de la variableFoo
. En d'autres termes, il vous indique ce queFoo
est une instance de.GetType(Bar)
renvoie uneType
objet qui contient le type de la propriété TypeNameBar
.Dans certains cas, le type d'un objet a été
Cast
est différente du type d'un objet a d'abord été instancié à partir d'. Dans l'exemple suivant, MyObj est unInteger
jeté dans unObject
:Dim MyVal As Integer = 42
Dim MyObj As Object = CType(MyVal, Object)
Donc, est
MyObj
de typeObject
ou de typeInteger
?MyObj.GetType()
vous dira que c'est unInteger
.Type Of Foo Is Bar
fonctionnalité, qui permet de déterminer une variableFoo
est compatible avec un TypeNameBar
.Type Of MyObj Is Integer
etType Of MyObj Is Object
permettra à la fois de retourner la valeur True. Pour la plupart des cas, TypeOf indique une variable est compatible avec un TypeName si la variable est d'un Type ou d'un Type qui en découle.Plus d'infos ici: https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/typeof-operator#remarks
Le test ci-dessous illustrent assez bien le comportement et l'utilisation de chaque de la cité des mots clés et des propriétés.
MODIFIER
Vous pouvez également utiliser
de l'Information.TypeName(Objet)
pour obtenir le Nom d'un objet donné. Par exemple,