Sélectionnez un cas avec l'opérateur "Is"
Dans VB.NET je dois comparer des objets dans un select case
déclaration.
Depuis select case
utilise =
opérateur par défaut et ce n'est pas définie pour les objets, une erreur de compilation est générée.
J'ai actuellement utiliser cette solution de contournement:
Select Case True
Case sender Is StyleBoldButton
Case sender Is StyleUnderButton
Case sender Is StyleItalicButton
End Select
qui fonctionne réellement.
Est-il quelque chose de plus joli à voir et plus compréhensible?
source d'informationauteur Teejay
Vous devez vous connecter pour publier un commentaire.
Tout ce qui est requis des opérateurs de comparaison (=, >=, <=, etc.) défini est un jeu équitable pour
Select Case
. À juste titre (à tort ou à raison), les références ne sont tout simplement pas par rapport à=
en VB; on doit utiliserIs
. (OuObject.Equals(objA As Object, objB As Object)
- mais, vraiment, pourquoi? lorsque vous avezIs
?)Mais jetez un oeil à Objet de l'égalité se comporte différents .NET - peut-être le VB moyen est moins de confusion? Que ce soit, je pense que vous êtes coincé avec le If-ElseIf échelle depuis
Select Case
ne pas faireIs
. (eh bien, il n', mais c'est une autreIs
plus proche de lait
de Hypercard.) Je pense que l'échelle ressemble à puce et facile à suivre:Comme vous l'avez souligné, la
Select Case True
modèle est un "OrElse" court-circuit de la solution de contournement dans VB6 - un vilain façon de répondre à un besoin réel. Mais ce n'est pas nécessaire VB.NET. Dans cet esprit, il est peut être préférable d'utiliser des modèles de conception plus en ligne avec les meilleures pratiques attendues d'un langage orienté objet. Par exemple, comme Denis Ligneur suggéré, pourquoi ne pas donner à chaque bouton de sa propre gestionnaire d'événement?Mais si vous insister sur quelque chose comme un Est capable de Sélectionner, ici est quelque chose que je n'aurai probablement pas l'utiliser moi-même:
Ici, je compte sur
.Equals
fonctionne comme le C#==
lorsqu'ils sont confrontés à deuxobject
types de comparer (voir http://visualstudiomagazine.com/articles/2011/02/01/equality-in-net.aspx). La beauté de ceci est quesender
est mentionné qu'une seule fois; toutefois, il y a tout ceElseIf .Equals( ... ) Then
vous aurez à taper pour chaque "Cas".Une autre façon je ne les utilise pas moi-même est à l'aide de
GetHashCode()
:Ici, je compte sur ce (très) peu que je sais de
GetHashCode()
de manière unique (assez) d'identifier ces contrôles. (Voir L'implémentation par défaut de l'Objet.GetHashCode() ).Je viens de tomber sur ce même problème. Après avoir vu un autre post et ce post, je suis venu à cette solution pour moi et je voulais la partager dans le cas de quelqu'un de vraiment voulu utiliser la sélection de Cas comme je l'ai fait 🙂
Mise à jour 6-16-16: Supprimé "Est = ", parce que c'était inutile.
Mise à jour 8-27-16: modification de l'utilisation de chaînes de caractères à utiliser .Nom pour un meilleur suivi des erreurs.
Moins concis, mais beaucoup plus lisible: