right - ¿Por qué una función de VB.Net que devuelve cadena solo en realidad devuelve un solo carácter?
substring visual basic 6 (1)
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 debe devolver.
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 ve así:
SomeStringValue = GetSomeStringValue(Value)
¿Por qué esto no devuelve la cadena completa?
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 reiteradas de otros usuarios, incluido un moderador, para volver a publicar de acuerdo con las reglas del sitio, lo reposiciono yo mismo.
Después de probar cientos de cosas diferentes, refactorizar mi código, recorrer el código en el depurador muchas veces, e incluso hacer que un compañero de trabajo analice el problema, finalmente, en un destello de genialidad, descubrí la respuesta.
En algún momento cuando estaba refactorizando el código, cambié la función para deshacerme del parámetro Value, dejándolo de la siguiente manera:
Public Function GetSomeStringValue() As String
... Code Goes here
Return Some_Multicharacter_String
End Function
Sin embargo, omití 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 como llamar a la función sin corchetes, que es una característica heredada de los días VB6. Luego, el parámetro Value 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 lo encuentren y puedan resolverlo mucho más rápido que yo. Me llevó bastante tiempo resolverlo, y espero poder ahorrarle a los demás algo de tiempo.