Почему функция VB.Net, возвращающая строку, на самом деле возвращает только один символ?

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

  •  02-07-2019
  •  | 
  •  

Вопрос

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

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

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()

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top