Почему функция VB.Net, которая возвращает строку, на самом деле возвращает только один символ? - PullRequest
33 голосов
/ 27 сентября 2008

Я вызываю функцию, которая возвращает строку, но на самом деле она возвращает только первый символ строки, которую она должна возвращать.

Вот пример кода для воссоздания проблемы, с которой я столкнулся:

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

Вызов функции выглядит так:

SomeStringValue = GetSomeStringValue(Value)

Почему это не возвращает всю строку?

1 Ответ

13 голосов
/ 03 июня 2011

Примечание: этот ответ изначально был написан ФП Кибби как самоответ. Тем не менее, это было написано в основной части вопроса, а не как отдельный ответ. Поскольку ОП отклонил повторные запросы других пользователей, в том числе модератора, на перепост в соответствии с правилами сайта, я сам его перепостил.

Попробовав сотню разных вещей, реорганизовав мой код, многократно пройдя по коду в отладчике и даже убедившись коллегой разобраться в проблеме, я в мгновение ока гениально нашел ответ.

В какой-то момент, когда я выполнял рефакторинг кода, я изменил функцию, чтобы избавиться от параметра Value, оставив его следующим образом:

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

Однако я забыл удалить параметр, который передавал при вызове функции:

SomeStringValue = GetSomeStringValue(Value)

Компилятор не жаловался, потому что интерпретировал то, что я делал, как вызов функции без скобок, что является унаследованной функцией от VB6 дней. Затем параметр Value преобразуется в индекс массива строки (он же символьный массив), который был возвращен функцией.

Итак, я удалил параметр, и все заработало нормально:

SomeStringValue = GetSomeStringValue()

Я публикую это, чтобы другие люди распознали проблему, когда / если они когда-либо столкнутся с ней, и смогут решить ее намного быстрее, чем я. Мне потребовалось много времени, чтобы решить, и я надеюсь, что смогу сэкономить время другим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...