0

SomethingLikeThisちょっとした背景: に変換する短いメソッドを書いていsomething_like_thisます。.ToCharArrayofでforeach ループを使用していましたが、 and$nameなどの入力に対して期待どおりに機能しませんでした。前の文字を確認できるように、for ループを選択しました。明確にするために、コードのその部分についてのヘルプは必要ありません...読み進めてください。BIOSPCIDevices

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 に答える