【问题标题】:VB.Net equivalent for Indexer InitializerIndexer Initializer 的 VB.Net 等效项
【发布时间】:2019-06-26 17:19:20
【问题描述】:

是否有任何 VB.NET 等效于 C#6 Indexer Initializer 构造?

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

--编辑--

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

更多关于差异的信息可以在blog entry的末尾找到。

-- 编辑2:

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

再次重申,Indexer Initializer 不是类型 Collection Initializer 的一种,是 Object Initializer 的一种。为什么 我一直在说这个?为什么这种区别很重要?因为你 不能将对象初始化器和集合初始化器混合在一起 初始化列表。

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

【问题讨论】:

  • Dim placesByZip As New Dictionary(Of String, String) From {{"63368", "Dardenne Prairie"}, {"63141", "Des Peres"}}
  • @soohoonigan:这就是答案——你应该把它作为答案发布。
  • 来自你的链接:Now, in Dictionary the net result is the same, but keep in mind this isn’t necessarily true for all classes. 所以也许使用字典以外的东西
  • 我能知道为什么我在这个问题上被否决了吗?我认为这个问题很准确,但答案只是错过了获取索引器初始化程序的重要事项。相反,答案旨在如何初始化字典......

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


【解决方案1】:

【讨论】:

    【解决方案2】:

    是的

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

    Collection Initializers

    【讨论】:

    • @CruleD 已经给出了这个答案(这是针对集合初始化程序而不是索引器初始化程序)
    • @bkqc:这是正确答案。与 C# 不同,VB 对索引器初始化程序没有特殊语法。请注意,这个答案实际上与 CruleD 发布的答案不同。
    • @CruleD - 在您编辑帖子之前它不正确。
    【解决方案3】:

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

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

    为了完整起见,collection initializers documentation 中也没有提到它。

    【讨论】:

      【解决方案4】:

      应该是

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

      (之前没试过)

      【讨论】:

      • 我相信这相当于集合初始化语法,而不是索引初始化语法。
      • 原始示例使用字符串索引器,因此如果您将其更改为 Dictionary(Of String, String),并将索引器值更改为字符串,您将拥有它。 (例如,{"63368", "Dardenne Prairie"}, ... )。
      • 公平,我看到了数字,所以我写了整数。 @JonathonChase我不知道有什么区别,我只是写了我认为是c#的vb等价物
      猜你喜欢
      • 1970-01-01
      • 2016-04-25
      • 1970-01-01
      • 2017-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-04
      • 2012-10-08
      相关资源
      最近更新 更多