【发布时间】:2013-07-26 19:07:13
【问题描述】:
一点背景:我正在编写一个将SomethingLikeThis 转换为something_like_this 的简短方法。我在$name 的.ToCharArray 上使用了foreach 循环,但是对于BIOS 和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 赋值,但如果没有解决方法,我可以。
【问题讨论】: