2010-02-15 3 views
2

Je:Pourquoi ai-je reçu InvalidCastException en passant une chaîne à un paramètre VariantType?

Protected Sub SepInsert(ByVal mriId As VariantType, 
         ByVal aeId As VariantType, 
         ByVal absId As VariantType) 
... 
End Sub 

et que vous voulez appeler avec une sélection DropDownList comme ceci:

Protected Sub cmdNewPrelinkedMri_Click(ByVal sender As Object, 
             ByVal e As System.EventArgs 
            ) Handles cmdNewPrelinkedMri.Click 
    SepInsert(ddlMriUnassigned.SelectedValue, -1, -1) 
End Sub 

où la valeur ddl choisie est, bien sûr, une chaîne (par exemple, "0412B0") .

Je reçois une exception InvalidCastException: La conversion de la chaîne "0412B0" en type "Integer" n'est pas valide. Pourquoi veut-il convertir en 'Integer' quand le paramètre est déclaré comme VariantType?

Que suis-je en train de mal comprendre ou de mal faire? Merci,

Chris

+0

Merci Sky. En ce qui concerne votre PS, je suis avec vous - je suis sûr que le fait que je n'ai jamais utilisé VariantType auparavant est la raison pour laquelle le comportement me fait trébucher. Je suis assez surpris que la vérification de type regarde à l'intérieur de SepInsert pour voir comment mriId sera utilisé ... J'aurais pensé qu'il serait satisfait au niveau de la déclaration des paramètres et laissé SepInsert faire ce qu'il veut avec sa variante valeurs ... Voici la référence à mriId dans SepInsert: sql & = "," "& mriId &" '" Ressemble à une chaîne pour moi ... pourquoi la plainte' Integer '? Il y a des raisons pour lesquelles j'essayais VariantType mais je peux reconsidérer ... – GISmatters

+0

oh ... Je suppose que cela ressemble à un usage non défini pour moi ... il doit être par défaut à int – GISmatters

+0

Hey, cela pourrait vous intéresser. .. http://skysanders.net/code/mapObjex/mapMarker.aspx –

Répondre

1

Certains déclaration SepInsert tente de forcer mriId dans un int. Montrez le code entier si vous ne le trouvez pas.

+2

PS: Vous devriez essayer d'éviter les variantes quand cela est possible. Si vous savez que c'est une chaîne tapez-le comme une chaîne. juste sayin .... –

Questions connexes