你自己的代码中做的是:
[object] $x = 'abc', 'def'
==>类型 'ABC' 和 '高清' 是[System.String]。因为你用逗号分隔它们,PowerShell会自动创建一个列表。所以执行该行$ x是一个System.Object []。索引0和1包含[System.String]。
$x = $null;
==>现在您定义$ null作为$ x的值。所以你正在消除价值。 $ x的类型现在未发现。您可以设置值123,然后$ x将变成类型System.Int32。你可以重新定义一个字符串等等。
在你的for循环使用
$x += 'somestring' + $addingSomeStuff + 'otherstring'
==>这里的结果是,for循环的PowerShell的第一次迭代内将一个字符串赋值给$ x。所以$ x的类型将是[System.String]。在下一次迭代中,+ =运算符将额外内容添加到$ x的值,该值仍然是[System.String]
不要将$ x设置为$ null。因为你会丢失类型信息。有关更多信息,请阅读PowerShell Extended Type System。
以下片段适用。希望有所帮助。
############################################
# The following was not part of your post #
# I added it to get it run in general #
$numberOfColumns = 2
$NamesOfColumns = 'Column1', 'Column2'
############################################
[object] $x = 'abc','def';
# don't set $x to $null
# define an empty list instead ;-)
$x = @()
for ($i = 0; $i -lt $numberOfColumns; $i++) {
$x += '$_.' + $NamesOfColumns[$i] + '.Trim()';
}
谢谢你的回复。它在保持它作为一个对象的工作,但动态它仍然看到对象不同,当你键入它。等待..完成评论仍然输入 –
我相信我告诉过你,但你采取的方法(建设和调用命令字符串)是不必要的复杂和令人费解。将代码调整到我为回应最后一个问题而发布的内容时,您的时间将会更长*而不是解决所有如果继续此路线将不可避免地弹出的陷阱和问题。 –