В PowerShell v3.0 PSCustomObject
. Это как PSObject
, но лучше. Среди других улучшений (например, сохранение порядка сохранения) упрощается создание объекта из хэш-таблицы:
[PSCustomObject]@{one=1; two=2;}
Теперь кажется очевидным, что это утверждение:
[System.Management.Automation.PSCustomObject]@{one=1; two=2;}
будет работать одинаково, потому что PSCustomObject
является "псевдонимом" для полного пространства имен + имя класса. Вместо этого я получаю сообщение об ошибке:
Невозможно преобразовать значение "System.Collections.Hashtable" типа "System.Collections.Hashtable", чтобы ввести "System.Management.Automation.PSCustomObject".
Я перечислил ускорители для обоих типов объектов:
[accelerators]::get.GetEnumerator() | where key -Like ps*object
Key Value
--- -----
psobject System.Management.Automation.PSObject
pscustomobject System.Management.Automation.PSObject
и обнаружил, что оба ссылаются на один и тот же класс PSObject
- это означает, что использование ускорителей может сделать кучу других вещей, чем просто сделать код короче.
Мои вопросы по этой проблеме:
- Есть ли у вас интересные примеры различий между использованием ускорителя и использованием полного имени типа?
- Следует ли избегать использования полного имени типа всякий раз, когда ускоритель доступен в качестве общей лучшей практики?
- Как проверить, может быть, использовать отражение, если ускоритель делает другие вещи, а не просто указывает на базовый класс?