1

私は次の機能を持っています。
私が呼び出すgetQueryObject(jsonString)と、collがオブジェクトを解析してから戻ります。への割り当てが機能しjsonObjectていません。バリアブルの操作を開始するとjsonObject、値は Nothing になります。Debug を実行してコードに従いますが、jsonObjectingetQueryObjectは失敗しません。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をオンにした後、エラーが発生し始めました。Option Strict On は、'Newtonsoft.Jsont.Linq.Token から Newtonsoft.Json.Linq.JObject' への暗黙的な変換を禁止します。

どのような種類の変換を行っているかわかりません。

4

2 に答える 2

2

問題は、関数で誤った変数名を使用したことです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 ExplicitOption Strict両方をオンにした場合、コンパイラはこの問題を検出します。プロジェクトのプロパティでこれらの設定を変更します。オフにした状態でVB.NETにコードを記述しないでください。Option Explicit予期しないことが起こります。

何が起こっているのかというと、VB.NETでは、jsonObject変数を宣言せずに使用できるようになっています。コンパイラNothingは、デフォルト値であるバックグラウンドに自動的に初期化します。これは、他のメソッドの変数の名前であるため、簡単に間違いを犯す可能性があります。ただし、このメソッドの変数の名前ではないため、期待どおりに機能しません。オフになっているOption Explicit限り、VB.NETは警告を表示せず、間違ったコードを幸福にコンパイルします。

(CamelCasingのすべてのメソッド名の推奨される.NETコーディング規則にも従っていることに注意してください。つまり、小文字ではなく大文字で始める必要があります。ローカル変数とパラメーターのみをpascalCased(最初の小文字-場合)。)

于 2011-05-20T16:21:22.480 に答える
0
Public Function getInformation(jsonString as string) as string
    Dim jsonObj As JObject
    jsonObject = getQueryObject(jsonString)
    'Operate on object here.
End Function

jsonObjectはグローバルに宣言されていますか?

于 2011-05-20T16:20:00.107 に答える