集合初始值设定项 提供缩短的语法,使你能够创建集合并使用初始值集填充该集合。 从一组已知值(例如,菜单选项或类别列表、初始数值集、日期或月份名称等字符串静态列表)或地理位置(例如用于验证的状态列表)创建集合时,集合初始值设定项非常有用。
有关集合的详细信息,请参阅 集合。
使用 From
关键字后跟大括号({}
)来识别集合初始化器。 这类似于数组中描述的数组字面量语法。 以下示例演示了使用集合初始值设定项创建集合的各种方法。
' Create an array of type String().
Dim winterMonths = {"December", "January", "February"}
' Create an array of type Integer()
Dim numbers = {1, 2, 3, 4, 5}
' Create a list of menu options. (Requires an extension method
' named Add for List(Of MenuOption)
Dim menuOptions = New List(Of MenuOption) From {{1, "Home"},
{2, "Products"},
{3, "News"},
{4, "Contact Us"}}
注释
C# 也提供集合初始值设定项。 C# 集合初始值设定项提供与 Visual Basic 集合初始值设定项相同的功能。 有关 C# 集合初始值设定项的详细信息,请参阅 对象和集合初始值设定项。
语法
集合初始值设定项由用大括号({}
)括起来的逗号分隔值列表(以关键字开头 From
),如以下代码所示。
Dim names As New List(Of String) From {"Christa", "Brian", "Tim"}
创建集合(如或集合List<T>Dictionary<TKey,TValue>)时,必须在集合初始值设定项之前提供集合类型,如以下代码所示。
Public Class AppMenu
Public Property Items As List(Of String) =
New List(Of String) From {"Home", "About", "Contact"}
End Class
注释
不能同时合并集合初始值设定项和对象初始值设定项来初始化同一集合对象。 可以使用对象初始值设定项来初始化集合初始值设定项中的对象。
通过使用集合初始值设定项来创建集合
使用集合初始值设定项创建集合时,集合初始值设定项中提供的每个值都将传递给集合的相应 Add
方法。 例如,如果使用集合初始值设定项创建一个 List<T> ,则集合初始值设定项中的每个字符串值将传递给 Add 该方法。 如果要使用集合初始值设定项创建集合,则指定的类型必须是有效的集合类型。 有效集合类型的示例包括实现 IEnumerable<T> 接口的类或继承 CollectionBase 类的类。 指定的类型还必须公开满足以下条件的 Add
方法。
方法
Add
必须在调用集合初始化器的范围中可用。Add
方法在可以访问集合非公共方法的场景中使用集合初始化器时,无需是公共的。该方法
Add
必须是集合类的实例成员或Shared
成员,或者是扩展方法。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
方法,则可以创建一个作为扩展方法。 有关如何将Add
方法创建为集合的扩展方法的示例,请参阅“如何:创建由集合初始值设定项使用的添加扩展方法”。 有关如何创建可用于集合初始值设定项的自定义集合的示例,请参阅 如何:创建集合初始值设定项使用的集合。
嵌套集合初始值设定项
可以在集合初始值设定项中嵌套值,从而标识要创建的集合的 Add
方法重载。 传递给 Add
方法的值必须用逗号分隔,并用大括号({}
)括起来,就像在数组字面量或集合初始化器中一样。
使用嵌套值创建集合时,嵌套值列表的每个元素都会作为参数 Add
传递给与元素类型匹配的方法的参数。 例如,下面的代码示例创建一个 Dictionary<TKey,TValue>,其中键是 Integer
类型,值是 String
类型。 每个嵌套值列表与 Add 的 Dictionary
方法匹配。
Dim days = New Dictionary(Of Integer, String) From
{{0, "Sunday"}, {1, "Monday"}}
前面的代码示例等效于以下代码。
Dim days = New Dictionary(Of Integer, String)
days.Add(0, "Sunday")
days.Add(1, "Monday")
只有来自第一级嵌套的嵌套值列表会发送给集合类型的 Add
方法。 更深层次的嵌套被视为数组字面量,并且嵌套的值列表不与任何集合的方法 Add
匹配。
相关主题
标题 | DESCRIPTION |
---|---|
如何:创建供集合初始化程序使用的 Add 扩展方法 | 演示如何创建一个调用 Add 的扩展方法,该方法可用于使用集合初始值设定项中的值填充集合。 |
如何:创建供集合初始化程序使用的集合 | 演示如何通过在实现 Add 的集合类中包含方法 IEnumerable 来启用集合初始值设定项的使用。 |