2016-03-04 166 views
2

要访问一个静态方法,我们使用遍历一个类的静态属性

[namespace.ClassName]::MethodName() 

和静电性能,我们使用

[namespace.ClassName]::Property 

如何通过这个类里面的所有静态属性迭代?

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

返回列表中的所有静态属性,但是如何使用它,即访问其值。 如果我想将变量传递给一个方法,我该怎么做? $list[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 
+0

感谢@RyanBernrose – user3469799

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