2009-03-27 8 views
17

を使用して定義したクラスで、一般的なリストを宣言し、私は人が追加型を使用して定義されたPowerShellの、で一覧を宣言しようとしています:Powershell。 「追加型」

add-type -Language CSharpVersion3 -TypeDefinition @" 
    public class Person 
    { 
     public Person() {} 

     public string First { get; set; } 
     public string Last { get; set; } 
    } 
"@ 

これは正常に動作します:

New-Object Person 
New-Object System.Collections.Generic.List``1[System.Object] 

しかし、この行は失敗します:

New-Object System.Collections.Generic.List``1[Person] 

ここで何が間違っていますか?

+0

PowerShell 2.0、私は推測しますか? –

+0

はい、2.0と一緒に働いています – alex2k8

+1

誰かが疑問に思っている人は、Powershell 3.0で失敗した行(Windows Server 2012でこれを実行したので "-Language CSharpVersion3"を削除する必要がありました)。 –

答えて

24

これはNew-Objectのバグです。 PowerShellはバージョン2で、このためのサポートを追加しました:: http://www.leeholmes.com/blog/2006/08/18/creating-generic-types-in-powershell

UPDATEを:これは、あなたがより簡単に作成するのに役立ちます、私はFileStreamオブジェクトのリストを作成しようとしていた

PS > $r = New-Object "System.Collections.Generic.List[Int]" 
PS > $r.Add(10) 
+1

StackOverflow Leeへようこそ! –

8

まあ、これは私の解決策でした(this linkに基づいて - 実際にあなたの問題を解決する方法を説明している):助け

$fs = New-Object 'System.Collections.Generic.List[System.IO.FileStream]' 
$sw = New-Object 'System.Collections.Generic.List[System.IO.StreamWriter]' 
$i = 0 
while ($i < 10) 
{ 
    $fsTemp = New-Object System.IO.FileStream("$newFileName",[System.IO.FileMode]'OpenOrCreate',[System.IO.FileAccess]'Write') 
    $fs.Add($fsTemp) 
    $swTemp = New-Object System.IO.StreamWriter($fsTemp) 
    $sw.Add($swTemp) 
    $i++ 
} 

願っています!

関連する問題