[vb.net] 變數初始值的指定
因為在 C# 用習慣了,換到 vb.net 有點卡卡的,原先用 vb6 又沒有這種語法。
基本型別是沒有什麼問題。
常常會忘記的就是物件的初始值指定、集合物件(collection, dictionary) 的內容值指定這兩件事。
所以寫下來備忘。
對於物件的初始值指定,是使用 With 關鍵字。在大括號裡給予初始值。
Class Apple
Public Place As String
Public weight As Integer
End ClassDim a As Apple = New Apple With {.Place = "Taiwan", .weight = 1}
對於集合物件,則是使用 From 關鍵字。在大括號裡給予初始值。這東西要 VisualStudio 2010 之後才有支援(又多了一個使用 C# 的理由)。太長可以換行。
Dim PostLabel As Dictionary(Of String, String) = New Dictionary(Of String, String) From
{
{"Customer", "Forest"},
{"Address", "Cali"},
{"Code", "302"}
}Dim Box As Collection = New Collection From {"Apple", 2, {"Made", "HC, Taiwan"}, PostLabel, a}
不過,寫到這,我有的疑問,key / value pair 是用大括號加逗點,list 也是。
一下子,上面的 collection,不曉得 {"Made", "HC, Taiwan"} 這一項是怎麼解釋?
寫了個小程式測試一下
For Each obj In Box
Console.WriteLine("Type:{0}", obj.GetType().Name)
Next
得到的結果是
Type:String
Type:Int32
Type:String
Type:Dictionary`2
Type:Apple
嗯,得到了一個 String 的型別?!
如果把該項換成 {"Made", "HC, Taiwan", "XX"},則會得到「型別初始設定式發生例外狀況」的錯誤。所以要記得這個特性才行。自己不要誤以為是正確的。
若是想要得到一個 string array,多出一組大括號,像是這樣
Dim Box As Collection = New Collection From {"Apple", 2, {{"Made", "HC Taiwan"}}, PostLabel, a}
得到的結果是
Type:String
Type:Int32
Type:String[]
Type:Dictionary`2
Type:Apple
但我想試著弄出 dictionary 來,試寫成
Dim Box As Collection = New Collection From {"Apple", 2, {{"Made", "HC Taiwan"}, {"Make", "TP Taiwan"}}, PostLabel, a}
得到錯誤
型別 '1-維陣列屬於 String' 的值無法轉換成 'String'。
所以目前還沒辦法隨心所欲呢。