2011-05-20 29 views
1

我有以下功能。
當我打電話給getQueryObject(jsonString)它讓coll解析對象然後返回。 分配給jsonObject不起作用。當我開始操作jsonObject bariable時,它的值爲什麼也沒有。 我運行調試並按照代碼和jsonObjectgetQueryObject不失敗。並返回它說它返回的對象。爲什麼Return關鍵字在VB.NET中不起作用?爲什麼我的變量的值= Nothing?

我是新來的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'的隱式轉換。

我不知道我在哪裏進行任何類型的轉換。

+0

什麼是JSON字符串值? – lhan 2011-05-20 16:12:57

+0

它是@「{」Name「」:「」Apple「」, 「」Expiry「」:新日期(1230422400000), 「」Price「」:3。99, 「」 尺寸 「」: 「」 小 「」, 「」 中 「」, 「」 大 「」 ] }「; – Whitecat 2011-05-20 16:16:42

+0

所以如果您通過以下方式與代碼,你叫後JObject .Parse,你可以在它返回之前在「jsonObject」中看到這些值嗎?它有可能返回正確,但是對Parse的調用什麼都不返回? – lhan 2011-05-20 16:21:02

回答

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 Explicit編譯代碼和Option Strict都翻轉,編譯器會爲你解決這個問題。更改項目屬性中的這些設置。 從不在VB.NET中編寫代碼,並關閉Option Explicit。意想不到的事情發生。

發生了什麼是VB.NET讓你使用jsonObject變量而從未聲明它。編譯器會自動將其初始化爲Nothing幕後,這是默認值。這是一個非常簡單的錯誤,因爲這是其他方法中變量的名稱。但它不能按預期工作,因爲它不是這個方法中變量的名稱。只要你有Option Explicit關閉,VB.NET不會警告你,並且樂意編譯錯誤的代碼。 (注意,我也遵循推薦的CamelCasing所有方法名的.NET編碼約定,這意味着它們應該以的大寫字母開頭,而不是小寫字母,只有局部變量和參數應該以pascalCased(初始小寫)。)

+0

很棒,我沒注意到! :) – lhan 2011-05-20 16:25:02

+0

感謝您尋求Option Strict的幫助。這非常有用。但是這個問題似乎沒有通過重命名這些方法來解決。 – Whitecat 2011-05-20 16:39:59

+0

@Whitecat:重命名*變量*,你的意思是?重命名*方法*只是一種風格,它不會影響代碼的運行方式。如果這不是答案,那麼我不知道該告訴你什麼......你展示的代碼對我來說運行得很好。唯一需要考慮的其他事情是,如果'JObject.Parse'在'getQueryObject'方法內拋出一個異常,並且你的代碼通過調用默認構造函數來捕獲它以返回一個空的'JObject'。 – 2011-05-20 16:44:33

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

jsonObject是全局聲明的嗎?

+0

沒有jsonObject沒有全局聲明 – Whitecat 2011-05-20 16:29:41

+0

我猜Cody說了什麼我沒有看到你在哪裏Dim'd jsonObject在本地或globaly – 2011-05-20 16:35:17

+0

是的,通常這種類型的錯誤應該只是給你一個編譯器錯誤。實際上,使用默認設置,它應該給你一個編譯器ler錯誤。但是我假設'Option Explicit'必須以某種方式被無意中關閉,在這種情況下,VB.NET會很樂意讓你編寫沒有任何意義的代碼。 :-)這是首先要檢查。 – 2011-05-20 16:39:43

相關問題