惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tenable Blog
Last Week in AI
Last Week in AI
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
H
Help Net Security
F
Fortinet All Blogs
MyScale Blog
MyScale Blog
宝玉的分享
宝玉的分享
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 司徒正美
量子位
N
Netflix TechBlog - Medium
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
Recorded Future
Recorded Future
博客园 - 三生石上(FineUI控件)
Vercel News
Vercel News
aimingoo的专栏
aimingoo的专栏
I
InfoQ
Microsoft Security Blog
Microsoft Security Blog
Scott Helme
Scott Helme
The Last Watchdog
The Last Watchdog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
IT之家
IT之家
AI
AI
WordPress大学
WordPress大学
Security Archives - TechRepublic
Security Archives - TechRepublic
Google Online Security Blog
Google Online Security Blog
U
Unit 42
V2EX - 技术
V2EX - 技术
MongoDB | Blog
MongoDB | Blog
Schneier on Security
Schneier on Security
博客园 - Franky
H
Heimdal Security Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Jina AI
Jina AI
W
WeLiveSecurity
P
Privacy & Cybersecurity Law Blog
Cloudbric
Cloudbric
B
Blog RSS Feed
N
News | PayPal Newsroom
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
I
Intezer
Hacker News - Newest:
Hacker News - Newest: "LLM"
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园_首页
罗磊的独立博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More
雷峰网
雷峰网

博客园 - Felix Liang

精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件 精进 Spring Boot 02 | Spring Boot 的文档结构、POM 文件格式的介绍,以及 Maven 的使用。 精进 Spring Boot 01 | Spring Boot 入门,用 Spring Boot 写第一个 Hello World How do I get started with Node.js 修改xampp的mysql默认密码和端口 Visual Studio 2013 错误系统找不到指定文件,0x80070002 Daily Build H公司数据同步的总结 VB2010新特性之——标识语言版本的新命令行选项/langversion (Visual Basic) 为什么开发人员不能估算时间? [翻译]SQL Server 未公开的两个存储过程sp_MSforeachtable 和 sp_MSforeachdb 获取应用程序的根Url - Felix Liang - 博客园 Lambda 表达式 Lambda Expressions (Visual Basic) 宽松委托转换(Relaxed delegate conversion) VB2010 的隐式续行(Implicit Line Continuation) 自动实现属性 Visual Basic 2010 新特性 VS2008 Tips #009 – 您可以在 ASP.NET 的 Web.config 文件中注册用户控件 VS2008 Tips #008 如何创建ASP.NET Web 用户控件并包含在Web 页面中 - Felix Liang
集合初始化器概览(Visual Basic)
Felix Liang · 2010-05-18 · via 博客园 - Felix Liang

集合初始化器概览 Collection Initializers Overview (Visual Basic)

集合初始化器提供简化的语法,使得创建集合的同时,可以用初始的集合值来填充它。当从既有的集合值创建新集合时,集合初始化器显得特别有用,例如,菜单列表或者编目(categories)、初始的数值集合、静态字符串列表如月份名称,或者地理位置如验证所用的州郡列表。

标识集合初始化器的方式是,用 From 关键字,后面紧跟着大括号"{}"。这类似于数组文本语法(array literal syntax)。下面代码展示用集合初始化器创建集合的各种方式:

' 创建 String数组
Dim winterMonths = {"December""January""February"}
 
' 创建 Integer 数组
Dim numbers = {12345}
 
' 创建菜单选项列表,需要List(Of MenuOption)的一个扩展方法 Add
Dim menuOptions = New List(Of MenuOption) From {{1"Home"},
{
2"Products"},
{
3"News"},
{
4"Contact Us"}}

 注意:C# 也提供集合初始化器,其功能如 VB 的一样。欲知更多关于 C# 集合初始化器,请看Object and Collection Initializers (C# Programming Guide)。

语法

集合初始化器由紧跟着 From 关键字、包含在大括号中、以逗号分隔的列表组成,如以下代码:

Dim names As New List(Of String) From {"Christa""Brian""Tim"}

 当你创建一个集合,如 List(Of T) 或者Dictionary(Of TKey, TValue),必须在集合初始化器前提供集合类型,如以下代码:

Public Class AppMenu
    
Public Property Items As List(Of String=
        
New List(Of String) From {"Home""About""Contact"}
End Class

 注意:集合初始化器不可跟对象初始化器(object initializer)一起使用。

用集合初始化器创建集合

使用集合初始化器创建集合时,集合初始化器提供的每个值都将传递给适当的 Add 方法。例如,您用集合初始化器创建一个 List(Of T),集合初始化器的每个值都传递给 Add 方法。若您想用集合初始化器创建集合,指定的类型必须是正确的集合类型(valid collection type)。正确集合类型的例子包含,实现了IEnumerable(Of T)接口的的类,或者是继承自 CollectionBase 类。指定的类型必需暴露满足格式的 Add 方法。

Add 方法必须在调用集合初始化器的上下文中可见。如果您在可以访问 非公有方法的地方使用集合初始化器,Add 方法不必须是 Public。

Add 方法必须是实例方法,或者共享方法,又或者扩展方法。

基于重载解决规则(overload resolution rules),对于集合初始化器提供的类型,必须存在可以匹配Add 方法。

例如,下面代码演示如何运用集合初始化器创建一个List(Of Customer) 。当代码运行时,每个 Customer 对象传递给泛型的 Add(Customer)

Dim customers = New List(Of Customer) From
{
    
New Customer("City Power & Light""http://www.cpandl.com/"),
    
New Customer("Wide World Importers""http://www.wideworldimporters.com/"),
    
New Customer("Lucerne Publishing""http://www.lucernepublishing.com/")
}

 如下代码演示不使用集合初始化器的等价物:

Dim customers = New List(Of Customer)
customers.Add(New Customer("City Power & Light""http://www.cpandl.com/"))
customers.Add(New Customer("Wide World Importers""http://www.wideworldimporters.com/"))
customers.Add(New Customer("Lucerne Publishing""http://www.lucernepublishing.com/"))

如果集合有一个 Add 方法的参数 跟 Customer 类的构造函数的参数 一致,您可以将Add 方法的参数值 嵌套到集合初始化器中,这在下一节中讨论。如果集合没有这样一个 Add 方法,您可以创建一个扩展方法。如何给集合添加扩展方法的例子,参见 How to: Create an Add Extension Method Used by a Collection Initializer。如何创建带集合初始化器的自定义集合(custom collection),参见 Create a Collection Used by a Collection Initializer

嵌套的集合初始化器

您可以在集合初始化器中嵌套值,以标识集合中一个特定的 Add 方法的重载版本。传递到 Add 方法的值必须包含在大括号中,并且以逗号分隔,就像在数组文本或集合初始化器中一样。

使用嵌套值创建集合,嵌套值列表的每个元素作为参数传递到匹配该元素类型的 Add 方法。例如,下面代码例子创建一个Dictionary(Of TKey, TValue),key 为 Integer 类型而 value 为 string 类型,嵌套值列表的每个元素匹配 Dictionary 的 Add 方法。

Dim days = New Dictionary(Of IntegerString) From
          {{0"Sunday"}, {1"Monday"}}

上面代码等同于下面的代码:

Dim days = New Dictionary(Of IntegerString)
days.Add(0"Sunday")
days.Add(1"Monday")

只有嵌套值列表的第一级嵌套,才传递到集合的 Add 方法。深层嵌套作为数组文本(array literal),嵌套值列表不会跟集合的任何 Add 方法匹配。