将Generic.List [T] ForEach方法的ScriptBlock作为Action [T]投射
我在使用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:Windowssystem32> $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:Windowssystem32> $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]]
。
任何帮助将不胜感激。
链接地址: http://www.djcxy.com/p/30383.html上一篇: Casting ScriptBlock as Action[T] for Generic.List[T] ForEach method