循环访问类的静态属性

本文关键字:静态 属性 访问 循环 | 更新日期: 2023-09-27 18:37:22

要访问静态方法,我们使用

[namespace.ClassName]::MethodName()

对于静态属性,我们使用

[namespace.ClassName]::Property

如何循环访问此类中的所有静态属性?

$list = [namespace.ClassName] | Get-Member -Static -MemberType Property

返回所有静态属性的列表,但我如何使用它,即访问其值。如果我想将变量传递给方法,我该怎么做? $list[0]不起作用。

循环访问类的静态属性

这应该适用于 Name 属性上的 foreach 循环。

$class = [namespace.ClassName] 
$list = $class | Get-Member -Static -MemberType Property
$list | select -expand Name | foreach {
   "$_ = $($class::$_)"
}

请注意,如果需要,可以通过更改 $class 变量来迭代类。

[Math] 类为例:

PS> $class = [math]
PS> $class | Get-Member -Static -MemberType Property | select -expand Name | foreach { "$_ = $($class::$_)" }
E = 2.71828182845905
PI = 3.14159265358979

这基本上与 Ryan Bemrose 的答案相同,但编写为一个吐出对象的函数。

function Get-StaticProperties
{
    Param (
        [type]$Class
    )
    gm -InputObject $Class -Static -MemberType Property |
        select -ExpandProperty Name | foreach {
            New-Object PSObject -Property ([ordered]@{ Name=$_; Value=$Class::$_ })
        }
}

然后,要调用它:

PS> Get-StaticProperties System.Math
Name            Value
----            -----
E    2.71828182845905
PI   3.14159265358979