gpt4 book ai didi

powershell - Powershell中Generic Type的泛型类型

转载 作者:行者123 更新时间:2023-12-04 05:13:45 25 4
gpt4 key购买 nike

Powershel 中的泛型非常令人困惑。
要实例化一个简单的 List,你需要拿着手鼓跳舞:

$type = ("System.Collections.Generic.List"+'`'+"1") -as "Type"
$type= $type.MakeGenericType("System.string" -as "Type")
$o = [Activator]::CreateInstance($type)

但是如果我需要一些更复杂的东西怎么办:例如 <Dictionary<string,List<Foo>>
或者例如这里: Dictionary<string,List<string>>
$listType = ("System.Collections.Generic.List"+'`'+"1") -as "Type"
$listType = $listType.MakeGenericType("System.string" -as "Type")
$L = [Activator]::CreateInstance($listType)

$dicType = ("System.Collections.Generic.Dictionary"+'`'+"2") -as "Type"

#the next line is problematic
$dicType = $dicType.MakeGenericType(
@( ("system.string" -as "Type"),
("System.Collections.Generic.List" as "Type)) # and that's of course wrong
)

$D = [Activator]::CreateInstance($dicType )

最佳答案

虽然您可以深入研究 CLR 内部表示并使自己过得很艰难,但您不必:

$dict = new-object 'collections.generic.dictionary[string,int]'
$dict.add("answer", 42)

想要类型文字表示吗?
[collections.generic.dictonary[string,int]]

完毕。泛型类型参数怎么样?
$dictOfList = new-object 'collections.generic.dictionary[string,
[collections.generic.list[int]]]'

完毕。

然而,有一个不幸的问题。在 PowerShell 2.0 中,将 BCL 和第 3 方类型作为类型参数混合和匹配时会出现错误。后者需要装配合格:
# broken over two lines for clarity with backtick escape
$o = new-object ('collections.generic.dictionary[[{0}],[{1}]]' -f `
[type1].fullname, [type2].fullname)

希望这可以帮助。在 PowerShell 3.0 中,此问题已得到修复。

关于powershell - Powershell中Generic Type的泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11975130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com