2010-06-02 47 views
4

我有一個簡單的功能,創建一個泛型列表:PowerShell的功能將不會返回對象

function test() 
{ 
    $genericType = [Type] "System.Collections.Generic.List``1" 
    [type[]] $typedParameters = ,"System.String" 
    $closedType = $genericType.MakeGenericType($typedParameters) 
    [Activator]::CreateInstance($closedType) 
} 

$a = test 

的問題是,$a總是空不管我怎麼努力。如果我在它正常工作的功能之外執行相同的代碼。

想法?

回答

8

恕我直言,這是陷阱#1。如果你從某種方式返回一個對象(我不知道是否唯一實現IEnumerable是唯一的情況),PowerShell展開對象並返回其中的項目。

您新創建的列表爲空,因此沒有任何返回。爲了使它的工作只是用這個:

,[Activator]::CreateInstance($closedType) 

這將使該被展開的一個項目陣列和項目(泛型列表)被分配給$a

更多信息

這裏有類似的問題,這將有助於你理解什麼的名單是怎麼回事:


:你不需要用括號聲明函數頭。如果您需要添加參數,函數將是這樣的:

function test { 
param($myParameter, $myParameter2) 
} 

function { 
param(
    [Parameter(Mandatory=true, Position=0)]$myParameter, 
    ... again $myParameter2) 
... 
+0

逗號! D'哦。謝謝,這些日子我會做對的。 – Dan 2010-06-03 05:52:02

3

更簡單的方法來使用泛型。這並不直接解決[Activator]方法,儘管

Function test 
{ 
    New-Object "system.collections.generic.list[string]" 
} 

(test).gettype()