Я только что понял это, и я узнал это с трудом, поэтому хочу поделиться. У вас есть следующий список строк:
>$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 или С#, вы получите сообщение об ошибке, указывающее, что это свойство недоступно. Но в PowerShell выясняется, что если он не найден на этом объекте, он выполняет итерацию через содержащиеся объекты и получает доступ к свойству на них. Итак, у вас есть список Ленгтов! Сюрприз!!
>$list.Length
1
2
3
Вы даже можете использовать методы!
>$list.ToUpper()
X
YY
ZZZ
Обратите внимание, что, как я и пробовал, эта "функция" также работает для System.Collections.ArrayList. Но он не работает для встроенного массива PowerShell.
Что называется эта функция? И почему он спроектирован таким образом? Это очень удивительно и подвержено ошибкам.