【问题标题】:Is this expected behavior from a Powershell for loop这是来自 Powershell for 循环的预期行为吗
【发布时间】:2013-07-26 19:07:13
【问题描述】:

一点背景:我正在编写一个将SomethingLikeThis 转换为something_like_this 的简短方法。我在$name.ToCharArray 上使用了foreach 循环,但是对于BIOSPCIDevices 等输入,这并没有达到预期的效果。我选择使用 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 赋值,但如果没有解决方法,我可以。

【问题讨论】:

    标签: powershell powershell-2.0


    【解决方案1】:

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

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

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

    【讨论】:

    • 为什么$c = $chars[$i] 不是$i = 0 所在的声明?
    • 该语句说“在 $i 的值处索引 chars 数组,然后将值分配给 C”脚本仅在循环的第一次迭代时出错。因为与其他语言一样,for 循环的操作顺序是 for(先执行;条件;后执行)。所以你尝试在 c=$chars[$i++] 之前做一个 $c.tostring
    • 所以直接回答你的问题。它们都是声明!你只需要早点声明它
    • 啊...完全忘记了它是在循环完成后执行的。谢谢!
    • 没问题的人。你越早开始像对待任何其他面向对象的语言一样对待 powershell,它就越容易。IMO
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-22
    • 2015-03-31
    • 2021-04-04
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多