如何在Powershell类中初始化静态字典属性?

时间:2018-09-13 09:13:03

标签: powershell

Powershell类中的静态属性是否可以包含通用字典?没有C#中存在的初始化语法,我还没有找到一种实现方法。

enum Environment
{
    Production
    QA
    Dev
}

class Config
{
    # How to get this populated?
    static [System.Collections.Generic.Dictionary[Environment, hashtable]] $EnvData
}

可能的解决方法:

  1. 添加类型和C#类
  2. GetEnvData()方法

还有我没想到的更好的方法吗?

1 个答案:

答案 0 :(得分:2)

就像在C#中一样,您可以使用静态构造函数(无论如何,这是构造函数的初始化糖):

Steam<B> converted = original.map( a -> { 
    if(a.split()){
        return [ new B(a), new B(a) ];
    }else return new B(a);
});

不是严格要求使用本地变量,但是知道初始化是原子的,我睡得更好。

您还可以 使用初始化程序(class Config { static [System.Collections.Generic.Dictionary[Environment, hashtable]] $EnvData static Config() { $d = New-Object ([System.Collections.Generic.Dictionary[Environment, hashtable]]) $d["Production"] = @{Setting="Foo"} [Config]::EnvData = $d } } ),但是在这种情况下这有点棘手,因为在一个语句中创建通用$EnvData = ...很尴尬,如果您变得很复杂(管道,嵌套函数调用),则类语法不喜欢它。如果需要,您仍然可以将初始化拆分为一个单独的隐藏静态函数,并调用该函数进行初始化(Dictionary),如果您具有许多概念上独立的属性,则该方法可能比一个大型构造函数更具可读性。