我是否需要在函数中重新定义对象?
我有以下main.ps1
$MyDict = New-Object 'system.collections.generic.dictionary[string,string]'
loadDict([ref]$MyDict)
我有一个带有函数
的functions.psm1function 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())
}
}
}
但是我收到以下错误..
[System.Management.Automation.PSReference'1 [[System.Collections.Generic.Dictionary'2 [[System.String, mscorlib,版本= 4.0.0.0,文化=中性, PublicKeyToken = b77a5c561934e089],[System.String,mscorlib, Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]], mscorlib,版本= 4.0.0.0,文化=中性, PublicKeyToken = b77a5c561934e089]]]“ContainsKey”未找到方法
当我不调用函数,但使用Main中的函数代码时,没有问题。
(更正“[”错字)
答案 0 :(得分:0)
答案是否。您不需要重新定义对象。
与Esperento57提到的一样,你的if条件中有一个[
。无论如何,您可以考虑使用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)
答案 1 :(得分:0)
将ref移到你的参数中并输入如下类型:
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)