我是VB.NET的新手。当我在MSDN上阅读文档(https://msdn.microsoft.com/en-us/library/vstudio/bb534304%28v=vs.100%29.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1)时,我看到以下代码(摘录):
Dim pets As New List(Of Pet)(New Pet() _
{New Pet With {.Name = "Barley", .Age = 8}, _
New Pet With {.Name = "Boots", .Age = 4}, _
New Pet With {.Name = "Whiskers", .Age = 1}, _
New Pet With {.Name = "Daisy", .Age = 4}})
我之前没有看到Pet类的定义。任何人都可以向我解释一下吗?
答案 0 :(得分:1)
这很令人困惑,因为VB.Net在这种情况下重新使用了一些令牌来表示不同的东西。我会将代码分散到几行并解释每一点会发生什么。
Dim pets As New List(Of Pet)
创建一个将保存Pet对象的列表对象。
(
我们正在调用List(Of Pet)类型的构造函数。 List(Of T)构造函数有几个重载,但这里的代码使用this one。
New Pet()
这是棘手的地方。此代码不创建新的Pet
对象。在此上下文中,()
标记表示这将是一个数组。
_
只是将代码移到下一行
{
现在表明我们处于Collection Initializer,用于立即使用项目填充新的数组/列表/等。
New Pet
这次我们正在创建一个新的Pet对象。
With {
这表明我们正在使用Object Initializer。这里值得一提的是,编译器对于作为数组的New Pet()和作为对象的New Pet()之间的差异的唯一提示是使用初始化器,并且两者之间的唯一区别是初始化程序是With
关键字。如果你不习惯它,它可能会使VB中的代码混乱,这会让你感到困惑。
.Name = "Barley", .Age = 8}
为新对象的属性指定一些值,并完成对象初始值设定项。
, _
移动到集合初始值设定项中的下一个项目,然后继续另一行。
New Pet With {.Name = "Boots", .Age = 4}, _
New Pet With {.Name = "Whiskers", .Age = 1}, _
New Pet With {.Name = "Daisy", .Age = 4}
与前面的代码一样,这会创建三个新的Pet对象,并为其某些属性设置值。请注意,在最后一个条目之后没有逗号(,)。
})
现在我们关闭集合初始值设定项,并完成对List构造函数的调用。