2009-07-29 5 views
0

je la condition suivanteL'utilisation instr lorsque la chaîne est rien

Si InStr ("a, b, c", stringUn)> 0 OrElse (instr ("y, z", chaineB)> 0 AndAlso valeur = 0) Puis endif

CONDition 1 est faux si je vérifie pour connaître l'état 2 qui est "(instr (" y, z "chaineB)> 0 AndAlso valeur = 0)"

ce qui me déconcerte est que quand stringB est rien il tombe toujours dans la condition if et exécute le code.

À première vue, il semblerait que lorsque la chaîneB est vide, la condition 2 échouerait et, par conséquent, ne tomberait pas dans la condition if.

Aucune explication pourquoi cela se produirait?

grâce

Répondre

2

La fonction InStr() a une surcharge en option qui commence par la position de commencer à vérifier (la « position de départ ».) Si cela est exclu (comme comme dans votre exemple), il commence la recherche que le début de la chaîne, comme vous le souhaitez.

Lorsque Nothing n'est pas passé dans la fonction pour stringB, la "position de départ" est renvoyée. Donc, on pourrait penser que "0" est retourné, mais en réalité vous obtiendrez probablement "1" en retour. En effet, la fonction InStr traite la chaîne comme un tableau de caractères basé sur 1 au lieu d'un tableau de caractères basé sur 0. Donc, la "position de départ" qui est retournée est 1, pas 0; et comme nous le savons tous, 1 est> 0 :) (Source on MSDN)

+1

En outre, vous pouvez envisager d'utiliser les autres fonctions de comparaison de chaînes dans .NET telles que stringB.Contains ("y, z") – ckittel

Questions connexes