2012-03-23 4 views
2

다음 Powershell 문에서 왜 Powershell Object []에서 .Net 배열 목록이나 스택을 인스턴스화하려면 쉼표가 필요합니까?Powershell 개체 [] to .Net 컬렉션?

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

이유는 필요 않고 쉼표은 무엇을 의미합니까?

답변

5

쉼표은 PowerShell의 배열 연산자입니다.

문제는 PowerShell이 ​​배열을 오버로드에 대한 인수로 래핑 해제하는 것입니다. 쉼표를 추가하면 배열로 유지됩니다. 쉼표 연산자는 항상 새로운 요소의 배열에 인수 값을 랩 :

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

액션 (2 판)에 의 Windows PowerShell에서 : 쉼표없이

는이 오류가 발생합니다.

+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을 생성자에 인수로 배열의 각 항목을 처리합니다. 모든 매개 변수를 하나의 매개 변수에 넣으려면 배열을 다른 배열로 묶어야합니다.