Powershell 2.0集合初始化程序

时间:2012-06-25 14:11:51

标签: powershell collections powershell-v2.0 initializer

在Powershell 2.0中,如何使用C#3.0集合初始值设定项? (How to set collection 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列。

我已经知道如何将列添加到DataTable类的Columns属性中。我想知道如何直接初始化集合。

2 个答案:

答案 0 :(得分:1)

PowerShell脚本语言中没有C#集合初始化程序功能。 PowerShell确实具有接近C#对象初始化程序功能的功能:

Add-Type -AssemblyName System.Windows.Forms
new-object system.drawing.point -property @{x = 1; y = 5}

通常,您会发现PowerShell没有很多C#的功能,包括没有三元运算符(?:)或null coalescing opertor(??)。没有能力实现新类型,更少的类型从其他类型继承。您还会发现PowerShell可以执行C#无法提供REPL体验的内容,哈希表@{}的内置语法,使用命名,位置和可选参数等功能轻松进行命令行参数解析以及支持来自管道输入的绑定参数。他们既有自己的长处,也有喜欢和不喜欢的东西。 : - )

如果您希望在未来版本的PowerShell中看到集合初始值设定项功能,可以在Microsoft Connect site上提交您的建议。

答案 1 :(得分:0)

$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)