2012-03-23 17 views
2

次のPowershellステートメントでは、Powershellオブジェクト[]から.Net配列リストまたはスタックをインスタンス化するためにコンマが必要なのはなぜですか?Powershellオブジェクト[] to .Netコレクション?

$list = "A","B","C" 
$stack = New-Object System.Collections.Stack(,$list) 

なぜ私はそれを必要とし、コンマは何を意味しますか?

答えて

5

コンマは、PowerShellの配列演算子です。

問題は、PowerShellが配列をオーバーロードの引数にアンラッピングしていることです。カンマを追加すると、配列として保持されます。アクションでのWindows PowerShell(第二版)から

New-Object : Cannot find an overload for "Stack" and the argument count: "3". 

:あなたはこのエラーを取得し、コンマなし

コンマ演算子は、常に新しい一要素の配列で、その引数の値をラップします。

+0

Ah HA! powershellのどんな面白い機能。感謝します。 –

+0

@Ashwinあなたが追加した選択肢を削除しました。私はうまくいきません。 '@(@(@(1)))'は '@(1)'と変わりません。 –

3

あなたが直接、コンストラクタに$listを渡すしようとした場合、あなたはこのエラーを取得:

PS C:\Users\Svick> New-Object System.Collections.Stack $list 
New-Object : Cannot find an overload for "Stack" and the argument count: "3". 

を、私は、これは何が起こっているのかを説明思う:PowerShellは、コンストラクタの引数として配列内の各項目を扱います。それらをすべて1つのパラメータに入れる場合は、配列を別の配列に囲む必要があります。