¿Por qué una función VB.Net que devuelve una cadena solo devuelve un único carácter?

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

  •  02-07-2019
  •  | 
  •  

Pregunta

Estoy llamando a una función que devuelve una cadena, pero en realidad solo está devolviendo el primer carácter de la cadena que se supone que está devolviendo.

Aquí hay una muestra de código para recrear el problema que estoy experimentando:

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

La llamada a la función se parece a:

SomeStringValue = GetSomeStringValue(Value)

¿Por qué esto no devuelve toda la cadena?

¿Fue útil?

Solución

  

Nota: esta respuesta fue escrita originalmente por el OP, Kibbee, como una respuesta automática. Sin embargo, fue escrito en el cuerpo de la pregunta, no como una respuesta separada real. Dado que el OP ha rechazado las solicitudes repetidas de otros usuarios, incluido un moderador, para volver a publicar de acuerdo con las reglas del sitio, lo estoy repostando yo mismo.

Después de probar cien cosas diferentes, refactorizando mi código, repasando el código en el depurador muchas veces, e incluso teniendo un compañero de trabajo que investiga el problema, finalmente, en un instante de genio, descubrí la respuesta.

En algún momento cuando estaba refactorizando el código, cambié la función para deshacerme del parámetro Valor, dejándolo como sigue:

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

Sin embargo, me olvidé de eliminar el parámetro que estaba pasando al llamar a la función:

SomeStringValue = GetSomeStringValue(Value)

El compilador no se quejó porque interpretó lo que estaba haciendo al llamar a la función sin corchetes, que es una característica heredada de los días de VB6. Luego, el parámetro Valor se transformó en el índice de matriz de la cadena (también conocida como matriz de caracteres) que se devolvió de la función.

Así que eliminé el parámetro y todo funcionó bien:

SomeStringValue = GetSomeStringValue()

Estoy publicando esto para que otras personas reconozcan el problema cuando / si lo encuentren, y puedan resolverlo mucho más rápido que yo. Me tomó un tiempo resolverlo, y espero poder salvar a otros en algún momento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top