在 PowerShell 中转换为自定义类

use*_*974 1 powershell casting class

一旦我在 PowerShell 中编写了自己的自定义类(比方说,MyAwesomeClass),我如何将对象转换为它?我的意思是,鉴于我有一个合适的构造函数,下面的语句是可以的

$var = [MyAwesomeClass]::new($anObject)
Run Code Online (Sandbox Code Playgroud)

但下面这个不起作用

$var = [MyAwesomeClass]$anObject
Run Code Online (Sandbox Code Playgroud)

我怎样才能做这个演员?

Mat*_*sen 5

如果您的类定义包含一个构造函数,该构造函数恰好采用任何类型之一$anObject作为参数,则强制转换[MyAwesomeClass]将成功:

class MyAwesomeClass
{
  [object[]]$Array

  MyAwesomeClass([object[]]$array)
  {
    $this.Array = $array
  }

  # ...
}

# This will now work, assuming `$anObject` is an array
[MyAwesomeClass]$anObject 
Run Code Online (Sandbox Code Playgroud)

或者,从源类型实现隐式转换:

class MyAwesomeClass
{
  [object[]]$Array

  hidden static
  [MyAwesomeClass] op_Implicit([object[]]$array){
    $newInstance = [MyAwesomeClass]::new()
    $newInstance.Array = $array

    return $newInstance
  }

  # ...
}


Run Code Online (Sandbox Code Playgroud)