迭代类的静态属性

时间:2016-03-04 21:02:15

标签: c# .net powershell powershell-v4.0 powershell-ise

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

[namespace.ClassName]::MethodName()

对于我们使用的静态属性

[namespace.ClassName]::Property

如何遍历此类中的所有静态属性?

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

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

2 个答案:

答案 0 :(得分:3)

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

$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

答案 1 :(得分:2)

这与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