遍历类的静态属性

5

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

[namespace.ClassName]::MethodName()

对于静态属性,我们使用
[namespace.ClassName]::Property

如何迭代遍历此类中的所有静态属性?
$list = [namespace.ClassName] | Get-Member -Static -MemberType Property

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

2个回答

6

这应该可以通过对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

感谢 @RyanBernrose - user3469799

3

这基本上与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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接