2016-03-04 169 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