J'ai une variable de type d'objet (contrôle .Tag) que je dois jeter à un type structuré, et changer un membre Ceci est un exemple artificiel mais représentatif.Comment puis-je faire du casting de style C dans VB.NET?
Public Structure struct_COLOURS
Dim ILikeRed as boolean
Dim ILikeGreen as boolean
End Structure
Dim AnObject as Object = (some source that is struct_COLOURS)
DirectCast(AnObject, struct_COLOURS).ILikeRed = True ' This is not valid syntax?!
Je ne me rappelle pas mon syntaxe C très bien, mais ce serait quelque chose comme ceci:
(struct_COLOURS*)AnObject->ILikeRed = true;
le point est que je peux jeter un objet à quelque chose et mettre les membres de la distribution résultant. Il semble que DirectCast soit réellement une fonction et qu'elle ne soit pas interprétée comme je l'interpréterais.
Bizarrement, si vous voulez seulement récupérer une valeur de membre, vous pouvez utiliser DirectCast:
dim YummyRed AS Boolean = DirectCast(AnObject, struct_COLOURS).ILikeRed
est très bien!
Si je ne peux pas lancer comme je le souhaite, et que je ne peux pas modifier la propriété Tag (donc ne le suggérez pas, ce n'est pas une option) pour stocker ces structures, quel est le moyen le plus rapide?
Comment placer quelque chose qui n'est pas encadré mais structuré? –
OK. Que dirais-je de stocker toutes mes structures dans un tableau typé séparé et le Tag contient juste l'index? La relation serait cohérente pour la durée de vie des contrôles. Je devrais changer beaucoup de code, mais déplacer les données hors de l'objet tag est un objectif à plus long terme de toute façon, mais pas celui que je voulais aborder maintenant. –
@Mark Les types de valeur sont * toujours * encadrés lorsqu'ils sont stockés dans un objet, il n'y a aucun moyen de contourner cela. Stocker l'index dans un tableau global peut être une solution acceptable dans votre cas. –