2008-09-27 9 views
33

J'appelle une fonction qui retourne une chaîne, mais elle ne fait que retourner le premier caractère de la chaîne qu'elle est supposée renvoyer.Pourquoi une fonction VB.Net qui retourne une chaîne ne renvoie-t-elle qu'un seul caractère?

Voici un morceau d'exemple de code pour recréer la question que je rencontre:

Public Function GetSomeStringValue(Value as Integer) As String 
    ... Code Goes here 
    Return Some_Multicharacter_string 
End Function 

L'appel de fonction ressemble:

SomeStringValue = GetSomeStringValue(Value) 

Pourquoi ce ne revient pas à la chaîne entière?

+1

Une autre raison de ne pas aimer les langages où les arguments et les index de tableau semblent identiques ... –

+0

Wow, c'est un gotcha vraiment impressionnant. –

+0

Il ne devrait pas rester sans réponse si – CheGueVerra

Répondre

12

Remarque: cette réponse a été rédigée à l'origine par l'OP, Kibbee, comme réponse personnelle. Cependant, il a été écrit dans le corps de la question, pas comme une réponse séparée réelle. Étant donné que le PO a refusé les demandes répétées d'autres utilisateurs, y compris un modérateur, de les rediffuser conformément aux règles du site, je le republie moi-même.

Après avoir essayé une centaine de choses différentes, refactorisation mon code, pas à pas dans le code dans le débogueur plusieurs fois, et même d'avoir un regard collègue dans le problème, je enfin, dans un éclair de génie, découverte la réponse.

À un certain moment où je refactoring le code, j'ai changé la fonction pour se débarrasser du paramètre de valeur, laissant comme suit:

Public Function GetSomeStringValue() As String 
    ... Code Goes here 
    Return Some_Multicharacter_String 
End Function 

Cependant, je négligeais pour supprimer le paramètre que je repassais en lorsque vous appelez la fonction:

SomeStringValue = GetSomeStringValue(Value) 

le compilateur ne se plaint pas parce qu'il a interprété ce que je faisais en appelant la fonction sans parenthèses, ce qui est une caractéristique héritée de l'époque VB6. Ensuite, le paramètre Value est transformé en index de tableau de la chaîne (également appelée tableau de caractères) renvoyée par la fonction.

Je retiré le paramètre, et tout a bien fonctionné:

SomeStringValue = GetSomeStringValue() 

je signale cela pour que d'autres personnes reconnaissent le problème quand/s'ils rencontrent jamais, et sont en mesure de résoudre beaucoup plus vite que moi. Il m'a fallu du temps pour le résoudre, et j'espère pouvoir sauver les autres.

Questions connexes