Pourquoi une fonction VB.Net qui renvoie une chaîne ne renvoie-t-elle réellement qu'un seul caractère?

StackOverflow https://stackoverflow.com/questions/142697

  •  02-07-2019
  •  | 
  •  

Question

J'appelle une fonction qui renvoie une chaîne, mais elle ne renvoie que le premier caractère de la chaîne qu'elle est supposée renvoyer.

Voici un exemple de code pour recréer le problème que je rencontre:

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

L'appel de fonction se présente comme suit:

SomeStringValue = GetSomeStringValue(Value)

Pourquoi cela ne renvoie-t-il pas la chaîne entière?

Était-ce utile?

La solution

  

Remarque: cette réponse a été écrite à l'origine par l'OP, Kibbee, en guise de réponse personnelle. Cependant, cela 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 d'un modérateur, de rediffuser conformément aux règles du site, je le republie moi-même.

Après avoir essayé cent choses différentes, refacturé mon code, parcourant le code dans le débogueur plusieurs fois et ayant même demandé à un collègue d’examiner le problème, j’ai finalement découvert la réponse en un éclair de génie.

À un moment donné, lors de la refactorisation du code, j'ai modifié la fonction pour supprimer le paramètre Value, en le laissant comme suit:

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

Cependant, j'ai omis de supprimer le paramètre que je transmettais lors de l'appel de la fonction:

SomeStringValue = GetSomeStringValue(Value)

Le compilateur ne s'est pas plaint parce qu'il a interprété ce que je faisais comme appelant la fonction sans crochets, ce qui est une fonctionnalité héritée des jours VB6. Ensuite, le paramètre Value transformé en index de tableau de la chaîne (aka tableau de caractères) renvoyé par la fonction.

J'ai donc supprimé le paramètre et tout a bien fonctionné:

SomeStringValue = GetSomeStringValue()

Je publie ce message pour que les autres personnes reconnaissent le problème lorsqu'elles le rencontrent, et soient capables de le résoudre beaucoup plus rapidement que moi. J'ai mis beaucoup de temps à résoudre et j'espère pouvoir sauver un peu de temps aux autres.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top