我是.Net World和Powershell的新手。我有以下代码:
$e = "A","A","A","B","A","B","A","A"
write-output $e.Replace("B", "C")
它可以工作并打印
A
A
A
C
A
C
A
A
但是我找不到仅针对system.string的system.array的替换方法。它为什么起作用?
答案 0 :(得分:2)
由于您运行的是PowerShell v3或更高版本,因此替换有效。在PowerShell v3中,Microsoft添加了一个名为member enumeration的功能,该功能使PowerShell在数组对象本身不具有此方法或属性的情况下在数组的所有元素上调用方法或属性。
如果您运行PowerShell v2(例如,通过调用powershell.exe -version 2
)并在该实例中运行代码,则会出现以下错误:
Replace : Method invocation failed because [System.Object[]] doesn't contain a method named 'Replace'. At line:1 char:24 + write-output $e.Replace <<<< ("B", "C") + CategoryInfo : InvalidOperation: (Replace:String) [], RuntimeException + FullyQualifiedErrorId : MethodNotFound
答案 1 :(得分:0)
首先,您不需要“写入输出”部分。但这是可行的,因为您可以将数组中的字符串替换为其他字符串。
让我演示一下:
$e = "A","A","A","B","A","B","A","A"
foreach($obj in $e){
$obj.GetType()
}
此输出(仅在前两行发布):
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object
True True String System.Object