2017-05-24 44 views
1

我是否需要重新定義函數中的對象?PowerShell在函數中定義對象?

我有以下main.ps1

$MyDict = New-Object 'system.collections.generic.dictionary[string,string]' 
loadDict([ref]$MyDict) 

和我有功能

function loadDict([ref]$return) 
{ 
    #pseudo - load data from table 
    foreach ($TableRow in $LoadTable){ 
     if($return.ContainsKey($TableRow.KEYID) -eq $false){ 
      $return.Add($TableRow.KEYID, $TableRow.TEXT.Trim()) 
     } 
    } 
} 

一個functions.psm1,但我得到以下錯誤..

[系統.Management.Automation.PSReference'1 [[System.Collections.Generic.Dictionary'2 [[System.String, mscorlib,Version = 4.0.0.0,Culture =中性, 公鑰= b77a5c561934e089],[System.String,mscorlib程序, 版本= 4.0.0.0,文化=中性公鑰= b77a5c561934e089]], mscorlib程序,版本= 4.0.0.0,文化=中性 公鑰= b77a5c561934e089] ]]「ContainsKey」找不到方法

當我不調用函數,但使用Main函數代碼時,沒有問題。

(校正的 「[」 錯字)

回答

0

答案是沒有。您不需要重新定義對象。

像Esperento57提到,你有一個[在你的條件。總之,你可以考慮使用bultin 哈希表

function loadDict 
{ 
    Param 
    (
     [hashtable]$MyDict 
    ) 
    #pseudo - load data from table 
    foreach ($TableRow in $LoadTable) 
    { 
     if($MyDict.ContainsKey($TableRow.KEYID) -eq $false) 
     { 
      $MyDict.Add($TableRow.KEYID, $TableRow.TEXT.Trim()) 
     } 
    } 
} 

$MyDict = @{} 
loadDict([ref]$MyDict) 
+0

謝謝,我得到了「說文解字」的事情從一個朋友我告訴我這比bultin hashtable快很多。我有幾個幾百兆「厚」的表格。我會嘗試您的解決方案並提供反饋。 – cernoel

+0

你能提供給我們一個'$ LoadTable'的例子嗎?您可以通過一次填充列表來加速腳本。 –

+0

:/對不起,它包含內部ERP數據。他們舉行例如ShopItem描述和東西..我所做的是每天加載一次字典,並將它們保存在RAM中。因此,Dict Load需要大約10分鐘的SQL Server,這確實很快。但是我需要在它存儲在Dict中之前先轉換或連接一些數據。 – cernoel

0

刪除裁判到您的參數,並把類型是這樣的:

function loadDict([system.collections.generic.dictionary[string,string]]$return) 
{ 
    #pseudo - load data from table 
    foreach ($TableRow in $LoadTable){ 
     if($return.ContainsKey($TableRow.KEYID) -eq $false){ 
      $return.Add($TableRow.KEYID, $TableRow.TEXT.Trim()) 
     } 
    } 
} 

$MyDict = New-Object 'system.collections.generic.dictionary[string,string]' 
loadDict($MyDict) 
+0

有了這個我有無效的數據錯誤,+ FullyQualifiedErrorId:ParameterArgumentTransformationError – cernoel

+0

我已經試過這個,這段代碼工作。你現在有其他問題,可能會成爲你的負擔 – Esperento57

相關問題