调用system.array上的replace方法



我是.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.array的替换方法,只能用于system.string。为什么它有效?

由于您运行的是PowerShell v3或更新版本,因此替换正在运行。在PowerShell v3中,Microsoft添加了一个名为成员枚举的功能,该功能使PowerShell在数组对象本身没有方法或属性的情况下对数组的所有元素调用方法或属性。

如果您运行PowerShell v2(例如,通过调用powershell.exe -version 2(并在该实例中运行代码,您将得到以下错误:

Replace:方法调用失败,因为[System.Object[]不包含名为"Replace"的方法。第1行字符:24+写入输出$e。替换<lt<lt;("B"、"C"(+CategoryInfo:InvalidOperation:(Replace:String([],RuntimeException+FullyQualifiedErrorId:MethodNotFound

首先,您不需要"写入输出"部分。但它之所以有效,是因为您将数组中的字符串替换为其他字符串。

让我演示一下:

$e = "A","A","A","B","A","B","A","A"
foreach($obj in $e){
$obj.GetType()
}

此输出(仅发布前2行(:

IsPublic IsSerial Name                                     BaseType                                                                                                                                                                                              
-------- -------- ----                                     --------                                                                                                                                                                                              
True     True     String                                   System.Object                                                                                                                                                                                         
True     True     String                                   System.Object 

最新更新