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