Почему ключевое слово Return не работает в VB.NET?Почему значение моей переменной = ничего? - PullRequest
1 голос
/ 20 мая 2011

У меня есть следующие функции.
Когда я вызываю getQueryObject(jsonString), он выполняет анализ, а затем возвращает объект.Назначение jsonObject не работает.Когда я начинаю работать с jsonObject, он имеет значение ничто .Я запускаю Debug и следую за кодом, и jsonObject в getQueryObject не перестает работать.и return говорит, что возвращает объект.

Я новичок в VB, есть что-то, чего мне не хватает?

Public Function getInformation(jsonString as string) as string
    Dim jsonObject As JObject
    jsonObject = getQueryObject(jsonString)
    'Operate on object here.
End Function

Private Function getQueryObject(jsonString as string) As JObject
    Dim jsonObject As JObject
    Try
        jsonObject = JObject.Parse(jsonString)

    Catch ex As Exception
        jsonObject = New JObject
    End Try
    Return jsonObject
End Function

Немного больше информации.После того как я включил Параметр строгий Я начал получать сообщение об ошибке.Option Strict On запрещает неявные преобразования из 'Newtonsoft.Jsont.Linq.Token в Newtonsoft.Json.Linq.JObject'.

Я не вижу, где я делаю любой тип преобразования.

Ответы [ 2 ]

2 голосов
/ 20 мая 2011

Проблема в том, что вы использовали неверное имя переменной в функции getInformation.

Измените код так, чтобы он выглядел следующим образом:

Public Function GetInformation(jsonString as string) as string
    Dim jsonObj As JObject
    jsonObj = GetQueryObject(jsonString)  // Change the name of this variable
                                          // to match the declaration above it.
    'Operate on object here.
End Function

Или, проще, объявите и инициализируйте переменную в одной строке:

Public Function GetInformation(jsonString as string) as string
    Dim jsonObj As JObject = GetQueryObject(jsonString)
    'Operate on object here.
End Function

Если бы вы компилировали свой код с Option Explicit и Option Strict, которые оба включили на , компилятор мог бы решить эту проблему для вас. Измените эти настройки в свойствах вашего проекта. НИКОГДА записать код в VB.NET с выключенным Option Explicit. Случаются неожиданные вещи.

Что происходит, так это то, что VB.NET позволяет вам использовать переменную jsonObject , даже не объявляя ее . Компилятор просто автоматически инициализирует его на Nothing за сценой, что является значением по умолчанию. Это достаточно простая ошибка, так как это имя переменной в методе other . Но он не работает должным образом, потому что это не имя переменной в этом методе. Пока у вас отключено Option Explicit, VB.NET не предупреждает вас и блаженно компилирует неправильный код.

(Обратите внимание, что я также следую рекомендованному соглашению о кодировании .NET CamelCasing для всех имен методов. Это означает, что они должны начинаться с заглавной буквы, а не строчной буквы. Только локальные переменные и параметры должны быть в pascalCased (начальная строчная буква).)

0 голосов
/ 20 мая 2011
Public Function getInformation(jsonString as string) as string
    Dim jsonObj As JObject
    jsonObject = getQueryObject(jsonString)
    'Operate on object here.
End Function

Объявлен ли jsonObject глобально?

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