Powershell类中的静态属性是否可以包含通用字典?没有C#中存在的初始化语法,我还没有找到一种实现方法。
enum Environment
{
Production
QA
Dev
}
class Config
{
# How to get this populated?
static [System.Collections.Generic.Dictionary[Environment, hashtable]] $EnvData
}
可能的解决方法:
还有我没想到的更好的方法吗?
答案 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
),如果您具有许多概念上独立的属性,则该方法可能比一个大型构造函数更具可读性。