0

一点背景:我正在写一个简短的方法来转换SomethingLikeThissomething_like_this. .ToCharArray我在of上使用了 foreach 循环$name,但是对于诸如BIOSand之类的输入并没有达到预期的效果PCIDevices。我选择使用 for 循环,以便检查前一个字符。需要明确的是,我不需要关于那部分代码的帮助......请继续阅读。

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++])

但这会导致这种情况发生

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在循环体中分配值,但如果没有解决方法,我可以。

4

1 回答 1

2

它唯一的 null 因为您从未声明过它。

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

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

于 2013-07-26T19:33:49.423 回答