gpt4 book ai didi

powershell - 似乎无法将通用集合与PowerShell类一起使用

转载 作者:行者123 更新时间:2023-12-03 00:31:40 25 4
gpt4 key购买 nike

我正在尝试调用 List[T](IEnumerable) ,将项直接添加到初始List中,就像这样,其中T是我编写的PowerShell类(以下示例使用类名Thing:

$someObject = Get-Thing # returns a single object
$list = [List[Thing]]::new(@( $someObject ))
但是,这会产生一个错误,表明它找不到此构造函数的重载:

Cannot find an overload for "List`1" and the argument count: "1".


List[T]设置为 Object类是可行的,但是:
$someObject = Get-Thing
$list = [List[Object]]::new(@( $someObject ))
在此有效的同时,我不确定为什么无法使用PowerShell类作为类型。我的理解是 only context-bound types and (by default) nested types无法与泛型一起使用,但是以下内容表明我的类不是 ContextBoundObject:
class Thing {
$Name

Thing($name) {
$this.Name = $name
}
}
$thing = [Thing]::new('Bender')
$thing -is [System.ContextBoundObject] # ==> False
我不确定PowerShell类是否是某种嵌套类型,并且 about_Classes没有提到嵌套类型。

最佳答案

I'm unsure why I'm unable to use my PowerShell class as the type


数组子表达式运算符 @()将其结果返回为 [object[]](一种满足参数类型 [IEnumerable[object]]的类型),这就是为什么当您将 [object]用作接收集合类型的类型参数时它始终可以工作的原因。

那么,该怎么办?
如果数组仅由 [Thing]组成,则可以显式转换为实现 [IEnumerable[Thing]]的更特定的集合类型:
$list = [List[Thing]]::new([Thing[]]@( $someObject ))

关于powershell - 似乎无法将通用集合与PowerShell类一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63981527/

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