在system.array上调用replace方法

时间:2018-12-07 12:59:42

标签: .net powershell

我是.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的替换方法。它为什么起作用?

2 个答案:

答案 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