2016-09-09 25 views
1

我正在使用Powershell 5並嘗試在PowerShell中調用某些.net類方法。在這裏,我下面的例子:https://msdn.microsoft.com/en-us/library/d9hy2xwa(v=vs.110).aspx[System.Array] ::查找方法在powershell中不受支持

然後寫在PowerShell中的一些代碼:

$arr = @() 
$arr += 10 
$arr += 5 
$arr += 7 
[System.Array]::find($arr, x => x -eq 10) 

但我得到的錯誤:

> At line:1 char:21 
> + [array]::find($arr, x => x -eq 5) 
> +      ~ Missing expression after ','. At line:1 char:22 
> + [array]::find($arr, x => x -eq 5) 
> +      ~ Unexpected token 'x' in expression or statement. At line:1 char:35 
> + [array]::find($arr, x => x -eq 5) 
> +         ~ Unexpected token ')' in expression or statement. 
>  + CategoryInfo   : ParserError: (:) [], ParentContainsErrorRecordException 
>  + FullyQualifiedErrorId : MissingExpressionAfterToken 
+1

'[ Array] :: Find((1..10),[Predicate [Object]] {$ args [0] -eq 5})' – PetSerAl

+0

[Array.Find on powershell array](http:// stackoverflow。 com/questions/21209946/array-find-on-powershell-array) – wOxxOm

+0

應該注意的是** [Array] :: Find是〜50倍比直接比較'** arr -eq 10 |更慢** select -first 1'當然,你可能沒有注意到在數組上使用'+ ='失去時間和速度以及內存之後(PS每次創建一個新數組!!使用ArrayList或System.Collections.Generic。*類型代替) – wOxxOm

回答

0

我認爲這個問題是你的「箭頭功能的使用「 句法。這句法是不是在PowerShell中的支持,儘管它可能可取代一個腳本塊,但幾個簡單的實驗並沒有找到可行的替代品......

PowerShell的比較,運營商可以在陣列的操作,這在你的應用程序中可能很有用。對於你的例子$arr -lt 10返回5 & 7.儘管與Array.Find不太一樣,但它有時非常有用。

要獲得Array.Find的全部功能,使用這樣的:支持

$arr -lt 10 | Select-Object -first 1 
0

的方法 - 但風格的lambda表達式都沒有!

你可以用一個腳本塊代替lambda表達式,但你必須把它明確的強制轉換爲Predicate類型:

$predicate = [Predicate[int]]{param([int]$x) $x -eq 10} 
[array]::Find($arr,$predicate) 

您也可以在線投它:

[array]::Find($arr,[Predicate[int]]{param([int]$x) $x -eq 10}) 
相關問題