Инициализатор коллекции Powershell 2.0
Как использовать инициализаторы коллекций C# 3.0 в Powershell 2.0? ( Как установить коллекцию inline?)
я пробовал
$table= New-Object System.Data.DataTable {
TableName = "my table" ,
Columns = {
New-Object System.Data.DataColumn "col1",([string]) ,
New-Object System.Data.DataColumn "col2",([long]) ,
New-Object System.Data.DataColumn "col3",([datetime])
}
}
но $table имеет 0 столбцов после этого бита кода.
Я уже знаю, как добавить столбцы в свойство Columns класса DataTable. Я хотел бы знать, как сделать прямую инициализацию коллекции.
2 ответа
Функция инициализации коллекции C# недоступна на языке сценариев PowerShell. PowerShell имеет функцию, близкую к функции инициализации объекта C#:
Add-Type -AssemblyName System.Windows.Forms
new-object system.drawing.point -property @{x = 1; y = 5}
В общем, вы обнаружите, что есть много возможностей C#, которых нет в PowerShell, включая отсутствие тернарного оператора (?:) или нулевого объединяющего оператора (??). Нет возможности реализовывать новые типы, тем более, типы, которые наследуются от другого типа. Вы также обнаружите, что PowerShell может делать то, что не нравится C#, предлагая опыт REPL, встроенный синтаксис для хеш-таблиц. @{}
легкий анализ параметров командной строки с такими функциями, как именованные, позиционные и дополнительные параметры, а также поддержка параметров привязки из конвейерного ввода. Они оба имеют свои сильные стороны, а также вещи, которые нравятся и не нравятся.:-)
Если вы хотите, чтобы функция инициализации коллекции была реализована в будущей версии PowerShell, вы можете отправить свое предложение на сайт Microsoft Connect.
$table = New-Object system.Data.DataTable "my table"
$col1 = New-Object system.Data.DataColumn "col1",([string])
$col2 = New-Object system.Data.DataColumn "col2",([long])
$col3 = New-Object system.Data.DataColumn "col3",([datetime])
$table.columns.add($col1)
$table.columns.add($col2)
$table.columns.add($col3)