2015-07-10 26 views
0

有什麼好的方法來確保管道結果總是一個沒有數組字面量的數組@()確保管道總是在不使用@()的情況下產生數組?

目前,我總是發現自己正在編寫管道,並假定結果是一個數組,例如,我知道我需要確保$Results總是一個數組。所以,我回來加魔法@()@(在前面和)在後面:通過向一個空數組

$Results = @() + <pipeline_statement> 


我的問題

$Results = @(<pipeline_statement>) 

或更神奇的:是有什麼辦法可以確保一個流水線總是導致一個數組?那不需要「魔術」@()?我想創建一個函數來收集管道結果,例如ConvertTo-Array,如:

$Results = <pipeline_statement> | ConvertTo-Array 

但我寧願使用默認的cmdlet或如有成語。


注意: 我也動心創建ConvertTo-CustomObject因爲我經常發現自己從哈希表中創建PSCustomObject

回答

3

是的,有。有能力直接將單個值轉換爲數組。如果該值已經是[Object[]],則不會有效更改。

[Array]$result=<pipeline_statement> 

正如@wannabeprogrammer的評論所述,這不會將空值轉換爲數組。如果事情可以返回null,下面除了將亡羊補牢:

if ($result -eq $null) { $result = @() } 
+1

嗯......這是一個很好的方式,需要提醒的是它會產生'$ null'而不是零長度數組,如果管道結果爲零目的。 – tkokasih

+0

@wannabeprogrammer那麼,如果我做'[數組] $ a = $ null; $ a.length'我得到0.所以,如果需要的話,可以在運行任何foreach代碼之前檢查長度。 '$ a | foreach {「b」}導致一次迭代,其中null作爲'$ _'提供。儘管如此,如果有人知道某些東西可以返回null,他們可以寫'if($ a -eq $ null){$ a = @()}' – Vesper

相關問題