17

我刚刚意识到这一点,而且我已经很难学会了,所以我想分享一下。考虑您有以下字符串列表:

>$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 的内置数组类型。

这个“功能”叫什么?为什么会这样设计?这是非常令人惊讶且容易出错的。

4

1 回答 1

6

Keith Hill 在评论中提到,这是 V3 中称为成员枚举的新功能。

请参阅devblogs.microsoft.com 上的“新 V3 语言功能”。

于 2013-06-05T01:50:12.913 回答