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

Is this expected behavior from a Powershell for loop

有点背景:我正在写一个简短的方法来将SomethingLikeThis转换成something_like_this。我在$name.ToCharArray上使用了foreach循环,但是对于BIOSPCIDevices这样的输入,这并没有达到预期的效果。我选择了一个for循环,这样我可以检查前一个字符。明确地说,我不需要在代码的那一部分上得到帮助…请继续阅读。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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"

这给我的错误是:

6

理想情况下,我会选择for ($i = 0; $i -lt $chars.Length; $c = $chars[$i++])

但这导致了这一切的发生

1
2
3
4
5
6
7
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

我来自Java和C的背景,所以这不工作是一种失望。有人知道一个解决办法,使这项工作作为一个班轮?我不想在循环体中给$c赋值,但是如果没有解决方法,我可以。


它只是空的,因为你从未声明过它。

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

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