Почему функция VB.Net, возвращающая строку, на самом деле возвращает только один символ?
Вопрос
Я вызываю функцию, которая возвращает строку, но на самом деле она возвращает только первый символ строки, которую она должна возвращать.
Вот пример фрагмента кода для воссоздания проблемы, с которой я сталкиваюсь:
Public Function GetSomeStringValue(Value as Integer) As String
... Code Goes here
Return Some_Multicharacter_string
End Function
Вызов функции выглядит следующим образом:
SomeStringValue = GetSomeStringValue(Value)
Почему это не возвращает всю строку целиком?
Решение
Примечание:этот ответ был первоначально написан OP, Kibbee, как самостоятельный ответ.Однако это было написано в тексте вопроса, а не как фактический отдельный ответ.Поскольку OP отклонил неоднократные просьбы других пользователей, включая модератора, сделать репост в соответствии с правилами сайта, я делаю репост сам.
Перепробовав сотню разных способов, проведя рефакторинг своего кода, много раз пройдясь по коду в отладчике и даже попросив коллег разобраться в проблеме, я, наконец, в порыве гениальности, нашел ответ.
В какой-то момент, когда я проводил рефакторинг кода, я изменил функцию, чтобы избавиться от параметра Value, оставив его следующим образом:
Public Function GetSomeStringValue() As String
... Code Goes here
Return Some_Multicharacter_String
End Function
Однако я забыл удалить параметр, который я передавал при вызове функции:
SomeStringValue = GetSomeStringValue(Value)
Компилятор не жаловался, потому что он интерпретировал то, что я делал, как вызов функции без скобок, что является устаревшей функцией времен VB6.Затем параметр Value преобразуется в индекс массива строки (он же символьный массив), который был возвращен из функции.
Поэтому я удалил этот параметр, и все заработало нормально:
SomeStringValue = GetSomeStringValue()
Я публикую это для того, чтобы другие люди узнали о проблеме, когда / если они когда-нибудь с ней столкнутся, и смогли решить ее гораздо быстрее, чем это сделал я.Мне потребовалось довольно много времени, чтобы решить эту проблему, и я надеюсь, что смогу сэкономить время другим.