我刚刚意识到这一点,我已经很难学会了,所以我想分享一下.考虑您有以下字符串列表:
>$list = New-Object -TypeName System.Collections.Generic.List[string]
>$list.Add("x")
>$list.Add("yy")
>$list.Add("zzz")
>$list
x
yy
zzz
Run Code Online (Sandbox Code Playgroud)
现在,如果您想获取列表中的项目数,您将访问.Count属性,它会按预期为您提供"3".
>$list.Count
3
Run Code Online (Sandbox Code Playgroud)
但是,有时候你会通过访问.Length而不是.Count来搞错.在其他语言中,如Python或C#,您会收到一条错误消息,指出此属性不可用.但是在PowerShell中,事实证明,如果在该对象上找不到它,它会遍历包含的对象并访问它们上的属性.所以你最终得到了一个Lengthes列表!惊喜!
>$list.Length
1
2
3
Run Code Online (Sandbox Code Playgroud)
你甚至可以调用方法!
>$list.ToUpper()
X
YY
ZZZ
Run Code Online (Sandbox Code Playgroud)
请注意,正如我所尝试的,此"功能"也适用于System.Collections.ArrayList.但它不适用于PowerShell的内置数组类型.
这个"功能"叫什么?为什么这样设计呢?这非常令人惊讶且容易出错.