【问题标题】:Initialize dictionary at declaration using PowerShell使用 PowerShell 在声明时初始化字典
【发布时间】:2011-10-09 13:43:40
【问题描述】:

鉴于此 powershell 代码:

$drivers = New-Object 'System.Collections.Generic.Dictionary[String,String]'
$drivers.Add("nitrous","vx")
$drivers.Add("directx","vd")
$drivers.Add("openGL","vo")

是否可以直接初始化这个字典而无需调用Add方法。像.NET 允许你做什么?

这样的?

$foo = New-Object 'System.Collections.Generic.Dictionary[String,String]'{{"a","Alley"},{"b" "bat"}}

[不确定这会涉及什么类型的语法]

【问题讨论】:

    标签: c# powershell dictionary initialization language-comparisons


    【解决方案1】:

    对于那些真正喜欢使用字典的人。 在我的情况下,我不得不使用另一个具有字典作为参数的 c# dll:

    New-Object System.Collections.Generic.Dictionary"[String,String]"
    

    这在 2011 年可能是不可能的

    【讨论】:

      【解决方案2】:

      没有。 Dictionary<TKey,TValue> 的初始化语法是 C# 语法糖果。 Powershell 对System.Collections.HashTable (@{}) 有自己的初始化语法支持:

      $drivers = @{"nitrous"="vx"; "directx"="vd"; "openGL"="vo"};
      

      对于 [可能] 几乎所有情况,它都可以像 Dictionary<TKey,TValue> 一样工作。如果您出于某种原因确实需要 Dictionary<TKey,TValue>,您可以创建一个函数,该函数采用 HashTable 并遍历键和值以将它们添加到新的 Dictionary<TKey,TValue>


      无论如何,C# 初始化语法并不完全是“直接”的。编译器从中生成对Add() 的调用。

      【讨论】:

      猜你喜欢
      • 2013-03-30
      • 2016-09-26
      • 1970-01-01
      • 2012-07-18
      • 2016-06-27
      • 1970-01-01
      • 2015-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多