PowerShell空数组$NameExample=@()转C#数组声明及脚本转换咨询
PowerShell空数组转C#的声明确认
问题背景
我正在将一段PowerShell脚本转换为C#程序,遇到一处疑问:脚本中用$NameExample = @()声明空数组,我认为对应C#的空数组写法是decimal[] NameExample = new decimal[] {},想确认是否正确。相关PowerShell代码如下:
$counter = 0 $UnitAvgerage = 20 $NameExample=@() $NameExample2=@() while ($counter -lt $NameExample.Count) { $NameExample2 += $NameExample[$counter..($counter+$UnitAvg -1)] | measure-object -average $counter += $NameExample2 }
解答
- 你对空数组声明的理解是正确的:PowerShell里
@()创建的空数组,对应C#中同类型的空数组声明就是decimal[] NameExample = new decimal[] {},也可以简化写成decimal[] NameExample = Array.Empty<decimal>(),两者效果完全一致。 - 注意脚本中的
+=操作:PowerShell里对数组使用+=时,本质是创建新数组并复制原元素,性能开销较高。如果你的C#代码需要频繁添加元素,更推荐用List<decimal>模拟这种动态行为,空列表声明写法为List<decimal> NameExample = new List<decimal>(),后续用Add()或AddRange()添加元素,比数组更高效。 - 另外脚本里的
$counter += $NameExample2存在逻辑错误(数组无法直接与整数相加),转换时需要先理清PowerShell代码的实际业务意图,再对应实现C#的逻辑。
内容的提问来源于stack exchange,提问作者MidnightBlueKnight
相关产品推荐
相关产品推荐

