[英]Create instance of type with params argument in PowerShell
我正在尝试使用New-Object在PowerShell中创建给定类型的实例。 要实例化的类型的构造函数具有类型[string params]的参数。 例如,
public class Test
{
public Test(params string[] data)
{
//
}
}
如果我尝试使用以下命令实例化以上类型:
$ins = New-Object Test
我收到以下错误:
System.Management.Automation.PSArgumentException:找不到构造函数。 找不到适合类型的构造函数。
实例化上述类型的正确方法是什么? 我不想传递任何虚拟或空字符串作为输入参数。
上面的示例代码仅用于演示目的。 我要实例化的类是Ninject库中的StandardKernel。 类定义如下:
public class StandardKernel : KernelBase
{
public StandardKernel(params INinjectModule[] modules)
: base(modules)
{
}
public StandardKernel(INinjectSettings settings, params INinjectModule[] modules)
: base(settings, modules)
{
}
}
以下代码在C#中可以正常工作:
var kernel = new StandardKernel()
在更好地理解了您的问题之后,我不知道一种使用纯PowerShell创建对象的方法,但是您可以创建一个C#方法,该方法将返回所需的内容(请参见下面的NewTest
类型)。
$code1 = @'
public class Test
{
public string arguments;
public Test(params string[] data)
{
if(data != null) arguments = string.Join(", ", data);
}
}
'@
$null = Add-Type -TypeDefinition $code1 -OutputAssembly c:\temp\Test.dll -PassThru
$code2 = @'
public class NewTest
{
public static Test GetTest()
{
return new Test();
}
}
'@
Add-Type -TypeDefinition $code2 -ReferencedAssemblies c:\temp\Test.dll
[NewTest]::GetTest()
除了@Rynant指出的params
关键字的问题之外,您的类构造函数还需要一个参数,但是在尝试实例化对象时您不提供该参数。
您可以使用空字符串实例化该对象以处理此问题:
$src = @"
public class Test {
public Test(params string[] data) {
//...
}
}
"@
Add-Type -TypeDefinition $src
$ins = New-Object Test ''
或者您可以重载构造函数:
$src = @"
public class Test {
public Test(params string[] data) {
//...
}
public Test() : this("") {}
}
"@
Add-Type -TypeDefinition $src
$ins = New-Object Test
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.