2010-06-02 4 views
4

J'ai une fonction simple qui crée une liste générique:fonction PowerShell ne retourne pas l'objet

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

$a = test 

Le problème est que $a est toujours nul, peu importe ce que j'essaie. Si j'exécute le même code en dehors de la fonction, cela fonctionne correctement.

Pensées?

Répondre

8

À mon humble avis c'est l'écueil # 1. Si vous renvoyez un objet de la fonction qui est en quelque sorte énumérable (je ne sais pas exactement si l'implémentation IEnumerable est le seul cas), PowerShell déroule l'objet et renvoie les éléments dans celui-ci.

Votre liste nouvellement créée était vide, donc rien n'a été renvoyé. Pour le faire fonctionner il suffit d'utiliser ceci:

,[Activator]::CreateInstance($closedType) 

Cela fera un tableau d'un article qui obtient l'élément et déroula (la liste générique) est attribué à $a.

Plus d'infos

Voici la liste des questions similaires qui vous aidera à comprendre ce qui se passe:


Remarque: vous ne devez déclarer l'en-tête de fonction entre parenthèses. Si vous avez besoin d'ajouter des paramètres, la fonction ressemblera à ceci:

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

ou

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

La virgule! D'oh. Merci, je vais avoir raison un de ces jours. – Dan

3

Un moyen plus facile de travailler avec des génériques. Cela ne résout pas directement l'approche de [Activateur] bien que

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

(test).gettype() 
Questions connexes