Powershell如何重载数组索引运算符?
Posted
技术标签:
【中文标题】Powershell如何重载数组索引运算符?【英文标题】:Powershell How to Overload Array Index Operator? 【发布时间】:2019-08-21 10:47:18 【问题描述】:在Powershell中,如何重载数组操作符的索引?
这是我现在正在做的事情:
class ThreeArray
$myArray = @(1, 2, 3)
[int] getValue ($index)
return $this.myArray[$index]
setValue ($index, $value)
$this.myArray[$index] = $value
$myThreeArray = New-Object ThreeArray
Write-Host $myThreeArray.getValue(1) # 2
$myThreeArray.setValue(2, 5)
Write-Host $myThreeArray.getValue(2) # 5
而且,我想这样做:
$myThreeArray = New-Object ThreeArray
Write-Host $myThreeArray[1] # 2
$myThreeArray[2] = 5
Write-Host $myThreeArray[2] # 5
那么,如何操作符重载数组的索引呢? 有可能吗?
谢谢!
【问题讨论】:
我认为你做不到。你可以改用$myThreeArray.myArray[1]
同意,Write-Host,在特定需要之外不应该使用,...但是....关于mklement0的指针,是go to语句。 Jeffrey Snover 于 2016 年 5 月改变了他的立场。使用 PowerShell v5 Write-Host 不再“杀死小狗”。数据被捕获到信息流中...twitter.com/jsnover/status/727902887183966208 .... ....docs.microsoft.com/en-us/powershell/module/…
好点,@postanote;这是我修改后的评论:
顺便说一句:Write-Host
is generally the wrong tool to use,除非意图是仅写入显示器,从而绕过 PowerShell 的成功输出流,从而绕过将输出发送到其他命令,将其捕获在变量中或将其重定向到文件。也就是说,在 PSv5+ 中,Write-Host
现在写入information stream,其输出可以被捕获,但只能通过6>
。
【参考方案1】:
最简单的方法是从System.Collections.ObjectModel.Collection<T>
派生
class ThreeArray : System.Collections.ObjectModel.Collection[string]
ThreeArray() : base([System.Collections.Generic.List[string]](1, 2, 3))
演示:
$myThreeArray = [ThreeArray]::new() # same as: New-Object ThreeArray
$myThreeArray[1] # print the 2nd element
$myThreeArray[2] = 5 # modify the 3rd element...
$myThreeArray[2] # and print it
'--- all elements:'
$myThreeArray # print all elmements
以上产出:
2
5
--- all elements:
1
2
5
【讨论】:
以上是关于Powershell如何重载数组索引运算符?的主要内容,如果未能解决你的问题,请参考以下文章