这是来自Powershell for循环的预期行为

时间:2013-07-26 19:07:13

标签: powershell powershell-v2.0

一点背景:我正在编写一个简短的方法,将SomethingLikeThis转换为something_like_this。我在.ToCharArray的{​​{1}}上使用了一个foreach循环,但是对$nameBIOS等输入没有达到预期的效果。我选择了for循环,所以我可以检查前一个字符。需要说明的是,我在代码的这一部分上并不需要帮助......请继续阅读。

PCIDevices

这给我的错误是:

function Get-FileName { param([string] $name) $out = '' $chars = $name.ToCharArray() for ($i = 0; $i -lt $chars.Length; $i++, $c = $chars[$i]) { if ($c -ge 'A' -and $c -le 'Z' -and -not $out.Length -eq 0) { $out += '_' } Write-Host $c $out += $c.ToString().ToLower() } return $out; } Get-FileName "BIOS"

理想情况下,我会Invalid assignment expression. The left hand side of an assignment operator needs to be something that can be assigned to like a variable or a property.

但这会导致这种情况发生

for ($i = 0; $i -lt $chars.Length; $c = $chars[$i++])

我来自Java和C#背景,所以这不起作用是一种失望。有人知道将这项工作作为一个班轮的解决方法吗?我宁愿不必在循环体中为You cannot call a method on a null-valued expression. At C:\Users\kylestev\Desktop\test.ps1:145 char:32 + $out += $c.ToString <<<< ().ToLower() B I O b_i_o 赋值,但如果没有解决方法,我可以。

1 个答案:

答案 0 :(得分:2)

它只有null,因为你从未声明它。

$c= ''
for ($i = 0; $i -lt $chars.Length; $i++,($c = $chars[$i])) {

就像Java和C#一样,声明变量和括号仍然适用。