2012-06-25 61 views
1

在PowerShell 2.0中,如何使用C#3.0集合初始化程序? (How to set collection inline?PowerShell 2.0集合初始化程序

我已經試過

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

但$表這段代碼後有0列。

我已經知道如何將列添加到DataTable類的Columns屬性中。我想知道如何對集合進行直接初始化。

回答

1

C#的集合初始化功能不可用在PowerShell腳本語言。 PowerShell中確實有一個特點,就是接近C#對象初始化功能:

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

在一般情況下,你會發現,有一些PowerShell中沒有包括沒有三元運算符(C#的許多功能:)或null合併opertor(??)。沒有能力實現新類型,從另一種類型繼承的類型更少。您還會發現,PowerShell可以執行C#不能提供REPL體驗的東西,爲散列表提供內置語法@{},使用命名參數,位置參數和可選參數等功能輕鬆進行命令行參數分析,並支持從管道綁定參數輸入。他們都有自己的優勢以及喜歡和不喜歡的事物。 :-)

如果您希望看到未來版本PowerShell中實現的集合初始值設定程序功能,您可以在Microsoft Connect site上提交建議。

+1

公平地說,C#_sort of_具有散列表字面支持。它只需要在像這樣的新語句的列表初始化部分中使用:'var hash = new Dictionary {{「five」,5},{「ten」,10}};'' – Shibumi

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) 
+0

我沒問過如何向DataTable類的Columns屬性添加列,我特別詢問了在調用New-Object時集合初始值設定項的語法是什麼。 –

+2

我可能很錯,但AFAIK ,你不能。 –