将ScriptBlock转换为Action [T] for Generic.List [T] ForEach方法

时间:2018-01-05 00:49:58

标签: powershell generics delegates action powershell-v4.0

我在PowerShell中使用Generic.List [T]上的ForEach()方法时遇到问题。我已经在Generic.List [T]上使用这些匿名委托(C#lambda表达式)测试了一些其他方法,它们可以工作。以下是我的代码,假设列表[T]具有值:

$list = New-Object System.Collections.Generic.List[uint32]
$rng = New-Object System.Security.Cryptography.RNGCryptoServiceProvider
$sysArray1 = @()

for ( $i = 0; $i -lt 10; $i++ )
{    
    $byte = New-Object byte[] 4
    $rng.GetBytes($byte)
    $list.Add( [bitconverter]::ToUInt32( $byte,0 ) )
    $sysArray1 += [bitconverter]::ToUInt32( $byte,0 )
}

使用$sysArray1我可以使用ForEach()方法;但是,$list我不是。

PS C:\Windows\system32> $sysArray1.ForEach({($_.ToString() + " Hello, World!")})
230848998 Hello, World!
1472227127 Hello, World!
2436917759 Hello, World!
797599365 Hello, World!
3872804216 Hello, World!
453721367 Hello, World!
46463291 Hello, World!
2921221794 Hello, World!
627551225 Hello, World!
1839786036 Hello, World!

PS C:\Windows\system32> $list.ForEach({$_.ToString() + " Hello, World!"})
You cannot call a method on a null-valued expression.
At line:1 char:16
+ $list.ForEach({$_.ToString() + " Hello, World!"})
+                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

上述错误的次数与List [T]的大小一样多。此外,我无法将这两种方法中的ScriptBlocks强制转换为[Action[T]]

非常感谢任何帮助。

0 个答案:

没有答案