繁体   English   中英

在PowerShell中使用params参数创建类型的实例

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM