gpt4 book ai didi

PowerShell:当 .ctor 只有一个类型为 List 的参数时,无法找到正确的 .ctor

转载 作者:行者123 更新时间:2023-12-03 01:34:10 25 4
gpt4 key购买 nike

PowerShell 中的 O-O 支持似乎存在错误。

当使用接受List 这是唯一参数的构造函数实例化类的对象时,PowerShell 无法找到正确的构造函数。

代码示例:

class MyClass
{
MyClass(
#[int]$i,
[System.Collections.Generic.List[string]] $theparams)
{

}
}

$parameters = New-Object System.Collections.Generic.List[string];
$foo = New-Object MyClass -ArgumentList @(
#1,
$parameters)

Constructor not found. Cannot find an appropriate constructor for type MyClass.

取消注释 [int]参数使其正常工作。

解决方法:由于 Powershell 不处理成员的可见性,如果使用参数来分配类成员,那么您可以直接在构造函数外部分配它。

最佳答案

为了避免此处讨论的陷阱,请考虑使用类的静态 ::new() 方法 (PSv5+),如 Maximilian Burszley's helpful answer 中所示。 .

注意:以下内容不仅适用于 New-Object,还适用于通过单个参数接受参数数组的所有 cmdlet (通常命名为 -ArgumentList/别名 -Args),特别是 Invoke-CommandStart-Job >.

要查找具有 -ArgumentList 参数的所有命令,请运行 Get-Help * -Parameter ArgumentList

<小时/>

将集合作为一个整体作为唯一参数传递给New-Object-ArgumentList 参数,您必须将其包装在 aux 中。数组使用,,数组构造运算符[1]:

New-Object MyClass -ArgumentList (, $parameters)

如果没有包装器,集合$parameters 的元素将被解释为单独 构造函数参数。

但是,如果至少有一个其他显式枚举参数,则不再需要包装:

# With `[int] $i` as the 1st constructor argument defined:
New-Object MyClass -ArgumentList 1, $parameters

原因是 1, $parameters隐式$parameters 作为single<的方式构造数组。/em> 参数:$parameters 作为一个整体成为数组的第二个参数。

<小时/><小时/>

[1] 请注意,@($parameters)不起作用,因为 @(...),数组子表达式运算符,如果表达式已经数组,则为无操作(宽松地说)。
我松散地说,因为 @(...) 实际上将输入集合重建为(新的)[object[]] 数组 -这会影响性能并可能导致不同的集合类型。

关于PowerShell:当 .ctor 只有一个类型为 List<T> 的参数时,无法找到正确的 .ctor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49307620/

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