2016-09-09 9 views
1

Powershell 5を使用していて、powershell内でいくつかの.netクラスメソッドを呼び出そうとしています。私はここでの例を以下しています:[System.Array] :: Findメソッドはpowershellでサポートされていません

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

しかし、私はエラーました: https://msdn.microsoft.com/en-us/library/d9hy2xwa(v=vs.110).aspx

は、その後、私はPowerShellでいくつかのコードを書いた私は、問題は「矢印機能の使用だと思います

> 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

を ':あなたはまた、インラインそれをキャストすることができます

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

配列] :: Find((1..10)、[述語[オブジェクト]] {$ args [0] -eq 5}) ' – PetSerAl

+0

[Array.Find on Powershell Array]の重複の可能性があります(http:// stackoverflow。 com/questions/21209946/array-find-on-powershell-array) – wOxxOm

+0

** [配列] :: Findは約50回です直接比較よりも遅い** '$ arr -eq 10 | select-first 1'もちろん、配列の '+ ='を使って時間と速度とメモリを失った後、PSは新しい配列を毎回作成します!代わりにArrayListまたはSystem.Collections.Generic。*型を使用してください) – wOxxOm

答えて

0

"構文です。それはスクリプトブロックを置換することが可能であってもよいが、いくつかの簡単な実験が実行可能な代替品を見つけることができませんでした...

PowerShellの比較演算子は、配列を操作できるかもしれませんが、その構文は、PowerShellでサポートされていません。あなたのアプリケーションに役立つ可能性があります。あなたの例の場合$arr -lt 10は5 &を返します。Array.Findと全く同じではありませんが、時には非常に便利です。

はこのようなものを使用し、Array.Findのフルパワーを取得するには:

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

方法がサポートされている - しかし、スタイルのラムダ式ではありません!

あなたはスクリプトブロックとラムダ式を置き換えることができますが、Predicate型への明示的なキャストにそれをする必要があります:[

[array]::Find($arr,[Predicate[int]]{param([int]$x) $x -eq 10}) 
関連する問題