Visual Basic 10中的集合與數(shù)組初始值設(shè)定
伴隨.NET 4.0和Visual Studio 2010的發(fā)布,Visual Basic 10添加了集合與數(shù)組初始值設(shè)定項(xiàng)的支持。這些功能與C#的非常類似,它僅是對擴(kuò)展方法和類型引用作出了少許改進(jìn)。
集合初始值設(shè)定項(xiàng)
和C#一樣,Visual Basic的集合初始值設(shè)定項(xiàng)用在那些實(shí)現(xiàn)了IEnumerable接口并暴露Add方法的類。但與C#不同的是,Add方法可在擴(kuò)展方法中進(jìn)行定義。
- var x As new List<String>() {"Item1", "Item2"}
- Dim x As New List(Of String) From {"Item1", "Item2"}
給Add方法傳入多個(gè)參數(shù)也和C#非常類似。
- var x = new Dictionary
(){{1, "Item1"}, {2, "Item2"}}- Dim x As New Dictionary(Of Integer, String) From {{1, "Item1"}, {2, "Item2"}}
C#語法中會(huì)有輕微的歧義現(xiàn)象,這使得它可用把屬性初始值設(shè)定項(xiàng)和對象初始值設(shè)定項(xiàng)聯(lián)系起來。通過使用關(guān)鍵字With和From,有人可能會(huì)假定VB能克服這方面的限制,把兩個(gè)初始值設(shè)定寫在同一條語句中。不幸的是,情況并沒那么簡單,以下的句子就會(huì)出現(xiàn)語法問題:
Dim x as New List(Of Integer) With {.Capacity = 10} From {1,2,3}
另一個(gè)VB學(xué)習(xí)C#的方面是異常的處理方式。如果給特定集合添加任何項(xiàng)的時(shí)候拋出異常,整個(gè)操作都會(huì)中止而該集合變量的值也不會(huì)改變。
數(shù)組初始值設(shè)定項(xiàng)
數(shù)值初始值設(shè)定項(xiàng)現(xiàn)在可支持類型引用,這樣大大減少了代碼量。正如我們接下來看到的代碼那樣,花括號中的數(shù)組值就需要對數(shù)組進(jìn)行是否創(chuàng)建和類型的推斷。
- Dim x = {1, 2, 3}
相比之下,VB早期的版本要求括號為空,用以表示數(shù)組。而且,在沒有明確指定的情況下,會(huì)把該變量定義為對象數(shù)組。
- Dim x As Integer() = {1, 2, 3} ‘integer array
- Dim x() = {1, 2, 3} ‘object array
同時(shí)支持多維數(shù)組和交錯(cuò)數(shù)組,盡管后者的語法(每個(gè)數(shù)組的括號)顯得有點(diǎn)笨拙。
- Dim multi = {{1, 2}, {3, 4}}
- Dim jagged()() = {({1, 2}), ({3, 4, 5})}
數(shù)組初始值設(shè)定項(xiàng)也可以在調(diào)用函數(shù)中內(nèi)聯(lián)使用。
【編輯推薦】