等效于Indexer Initializer的VB.Net

时间:2019-06-26 17:19:20

标签: c# vb.net c#-6.0 initializer

是否存在与C#6 Indexer Initializer构造等效的VB.NET?

var placesByZip = new Dictionary<string, string>
     {
         ["63368"] = "Dardenne Prairie",
         ["63141"] = "Des Peres",
         ["63101"] = "St. Louis"
     };

-编辑-

更准确地说,我正在寻找Indexer Initializer(这是一个对象初始化器),而不是集合初始化器。

有关差异的更多信息,可以在此blog entry的结尾处找到。

-编辑2:

在提到的博客中,解决方案应允许这样做:

  

再次,我想重申一下,Indexer Initializer不是一种类型   是集合初始化程序的一种,它是一种对象初始化程序。为什么   我一直在说吗?为什么这种区别很重要?因为你   无法将对象初始值设定项和集合初始值设定项混在一起   初始化列表。

     

因此,我们无法初始化集合并在同一集合中设置属性   初始化列表,但我们可以在其中设置属性,字段和索引器   相同的初始化列表,因为它们都是有效的对象   初始化程序。

4 个答案:

答案 0 :(得分:2)

答案 1 :(得分:0)

应该是

Dim placesByZip as New Dictionary(Of String, String) From {
{"63368", "Dardenne Prairie"}, 
{"63141", "Des Peres"},
{"63101", "St. Louis"}
}

(从未尝试过)

答案 2 :(得分:0)

    Dim placesByZip As New Dictionary(Of String, String) From {
        {"63368", "Dardenne Prairie"},
        {"63141", "Des Peres"},
        {"63101", "St. Louis"}}

Collection Initializers

答案 3 :(得分:0)

自2019年6月27日起,VB.NET版本15.8(VS 2017),未根据Microsoft documentation on object initializers授权来自索引成员的对象初始化。

  

正在初始化的类成员不能被索引或限定

出于完整性考虑,collection initializers documentation中也没有提及。