vonPryz предоставил критический указатель в комментарии: List`1
- это .NET представление универсального типа с именем List
с арностью (`
)1
, то есть универсальный тип с параметром 1 типа .
(Использование `
в этом контексте не связано с использованием в PowerShell `
в качестве escape-символа).
В вашем случае System.Collections.Generic.List`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]
означает, что универсальный тип был закрыт (экземпляр) с типом System.String
.
Если оставить квалификацию сборки в стороне (mscorlib, Version = ...
), эквивалентное представление PowerShell равно System.Collections.Generic.List`1[[string]]
, который можно упростить двумя способами, однако:
- Индикатор арности
`1
можно опустить, учитывая, что арность подразумевается аргументом типа в [...]
,[string]
. - Учитывая, что есть только параметр типа 1 , вы можете опустить внешний
[...]
вокруг списка аргументов типа.
Следовательно, выможно использовать только System.Collections.Generic.List[string]
или, выраженное как литерал типа PowerShell ([...]
), [System.Collections.Generic.List[string]]
Необязательное чтение: сокращение имен и литералов типовв PowerShell:
[System.Collections.Generic.List[string]]
немного громоздко, и его можно сократить двумя способами:
PowerShell позволяет пропустить часть System.
пространства имен для любого типа , поэтому [Collections.Generic.List[string]]
тоже работает.
PowerShell v5 + предлагает оператор using namespace
, аналогичный оператору C # using
:
# Note:
# * `using namespace` must be at the *start* of the script (potentially
# preceded by other `using` statements and comments only)
# * The 'System.' part of a namespace must *not* be omitted.
using namespace System.Collections.Generic
[List[string]] # short for: [System.Collections.Generic.List[string]]
Кроме того, PowerShell имеет встроенныйв ускорителях типов для некоторых часто используемых типов, которые являются однокомпонентными именами, которые ссылаются на конкретные типы без необходимости указывать их пространство имен происхождения;Например, [xml]
- это ускоритель типов для [System.Xml.XmlDocument]
.
В этом блоге TechNet показано, что вы можете использовать следующую команду для вывода списка всех встроенных ускорителей типов :
[psobject].Assembly.GetType("System.Management.Automation.TypeAccelerators")::
get.GetEnumerator() | Sort-Object Key
Как указывает TheIncorrigible1 , вы даже можете определять собственные ускорители типов с помощью метода ::Add()
;Например, следующая команда определяет [cmdinfo]
как ускоритель для типа [System.Management.Automation.CommandInfo]
:
[psobject].Assembly.GetType("System.Management.Automation.TypeAccelerators")::
Add('cmdinfo', [System.Management.Automation.CommandInfo])
Новый ускоритель будет доступен для сеанса глобально (но только для текущего сеанса), даже если вызовсделано из детской области.