「如何实现流动式软件发布」线上课堂开课啦,快来报名参与课堂抽奖吧~ 了解详情
写点什么

VB 10 中集合与数组的初始值设定项

2009 年 10 月 26 日

伴随.NET 4.0 和 Visual Studio 10 的发布,Visual Basic 10 添加了集合与数组初始值设定项的支持。这些功能与 C#的非常类似,它仅是对扩展方法和类型引用作出了少许改进。

集合初始值设定项

和 C#一样,Visual Basic 的集合初始值设定项用在那些实现了 IEnumerable 接口并暴露 Add 方法的类。但与 C#不同的是,Add 方法可在扩展方法中进行定义。

复制代码
<p>var x As new List<String>() {"Item1", "Item2"}</p>
<p>Dim x As New List(Of String) From {"Item1", "Item2"}</p>

给 Add 方法传入多个参数也和 C#非常类似。

复制代码
<p>var x = new Dictionary<int, string>(){{1, "Item1"}, {2, "Item2"}}</p>
<p>Dim x As New Dictionary(Of Integer, String) From {{1, "Item1"}, {2, "Item2"}}</p>

C#语法中会有轻微的歧义现象,这使得它可用把属性初始值设定项和对象初始值设定项联系起来。通过使用关键字 With 和 From,有人可能会假定 VB 能克服这方面的限制,把两个初始值设定写在同一条语句中。不幸的是,情况并没那么简单,以下的句子就会出现语法问题:

复制代码
<p>Dim x as New List(Of Integer) With {.Capacity = 10} From {1,2,3}</p>

另一个 VB 学习 C#的方面是异常的处理方式。如果给特定集合添加任何项的时候抛出异常,整个操作都会中止而该集合变量的值也不会改变。

数组初始值设定项

数值初始值设定项现在可支持类型引用,这样大大减少了代码量。正如我们接下来看到的代码那样,花括号中的数组值就需要对数组进行是否创建和类型的推断。

复制代码
<p>Dim x = {1, 2, 3}</p>

相比之下,VB 早期的版本要求括号为空,用以表示数组。而且,在没有明确指定的情况下,会把该变量定义为对象数组。

复制代码
<p>Dim x As Integer() = {1, 2, 3} ‘integer array</p>
<p>Dim x() = {1, 2, 3} ‘object array</p>

同时支持多维数组和交错数组,尽管后者的语法(每个数组的括号)显得有点笨拙。

复制代码
<p>Dim multi = {{1, 2}, {3, 4}}</p>
<p>Dim jagged()() = {({1, 2}), ({3, 4, 5})}</p>

数组初始值设定项也可以在调用函数中内联使用。

查看英文原文: Collection and Array Initializers in VB 10

2009 年 10 月 26 日 10:31980
用户头像

发布了 87 篇内容, 共 17.6 次阅读, 收获喜欢 1 次。

关注

评论

发布
暂无评论
发现更多内容

中台上线半年,我总结出了“七宗罪”

punkboy

中台 企业中台 后台开发 业务中台 后台

Kafka的生产者优秀架构设计

奈学教育

kafka 分布式

做一个纸上谈兵的项目经理

escray

从零到部署:用 Vue 和 Express 实现迷你全栈电商应用(三)

图雀社区

vue.js Vue Node

Sula - 可能是西湖区最好用的antd配置框架

开远

前端开发 antd sula 配置化开发 前端框架

2020年6月3日 对象与类

瑞克与莫迪

科学提升认知方法之贝叶斯公式

奈学教育

贝叶斯公式

JUC整理笔记五之梳理Varhandle(下)

JFound

Java

【译文】为什么说Rust是机器人技术的未来

袁承兴

rust 机器人 嵌入式

分布式事务 - 三种常见的解决方案

Java收录阁

分布式事务

N皇后问题之位运算解法

孙苏勇

算法 DFS 位运算

React之Context源码分析与实践

费马

源码分析 React useContext Context React-Router

如何更好的交谈(以英语为例)

董一凡

学习 生活

女朋友跟我吐槽Java中ArrayList遍历时删除元素的各种姿势

NotFound9

Java 架构 面试 编程语言 后端

大话设计模式 | 0 面向对象基础

Puran

C# 设计模式

ArrayList浅析

章小传

Java collection 原理 ArrayList

架构师必备的ToB产品交付之双轮驱动思维模型

常平

产品 极客大学架构师训练营

计算机超全核心技术知识

cxuan

后端 计算机基础

我的个人知识管理方法

lidaobing

个人成长 知识管理 PKM

SpringCloud-OpenFeign源码

云淡风轻

Spring Cloud

路径依赖 - 偶然决策导致的依赖。

石云升

思维模型 路径依赖 网络效应 沉没成本 价值网依赖

一文让你快速上手 Mockito 单元测试框架

mghio

Java spring 单元测试 Mockito

JDK 15 都发布了,可 Java 8 依然是最爱

古时的风筝

Java Java 25 周年 Java版本

自定义 SpringBootStarter

lee

愚蠢写作术(2):怎么让你的文章变得冷冰冰

史方远

学习 个人成长 写作

多来点胜利,对冲颓丧

zhoo299

成长 备忘

从零到部署:用 Vue 和 Express 实现迷你全栈电商应用(四)

图雀社区

Vue Node

分享一份阿里架构师 651 多个技术分支的脑图

奈学教育

大数据

除了公关,我还能为公司做点什么?(系列1)

邓瑞恒Ryan

学习 个人成长 自我管理 成长 职业成长

源码分析 | 像盗墓一样分析Spring是怎么初始化xml并注册bean的

小傅哥

源码分析 小傅哥 spring源码 bean注入过程

GitHub上10个不可错过的另类有趣项目

码农神说

GitHub 程序员人生 开源项目

VB 10中集合与数组的初始值设定项-InfoQ