PowerShell泛型字典存在对应键却无法取值问题求助
问题原因及解决方法
可能的原因1:错误使用变量语法访问键
当你写$dictionary[A1]时,PowerShell会将A1视为变量名而非字符串字面量。如果未预先定义$A1变量,这个表达式等价于$dictionary[$null],字典中不存在$null键,因此返回$null,控制台无输出。
可能的原因2:键的实际内容与预期不符
虽然你看到字典里有"A1"对应的键值对,但实际的键可能包含隐藏字符(如空格、制表符)、大小写不一致,或者拼写错误。比如填充时不小心用了"A1 "(末尾带空格),但访问时用"A1",自然找不到对应值。
可能的原因3:字典默认区分大小写
System.Collections.Generic.Dictionary[string, int[]]默认是区分大小写的。如果填充时用的是小写"a1",但访问时用大写"A1",会因为键不匹配返回$null。
解决方法
1. 使用字符串字面量访问键
访问字典时必须用单引号或双引号包裹键名,避免PowerShell将其解析为变量:
# 正确写法 $dictionary["A1"] $dictionary['A1']
2. 检查键的实际内容
输出所有键的详细信息,确认键的实际值与预期一致:
$dictionary.Keys | ForEach-Object { Write-Host "键内容: '$_' 字符长度: $($_.Length) 字节长度: $([System.Text.Encoding]::UTF8.GetByteCount($_))" }
如果发现键有多余字符,需要修正填充字典时的键值。
3. 按需设置不区分大小写的字典
如果需要不区分大小写的键匹配,创建字典时指定对应比较器:
# 创建不区分大小写的字典 $dictionary = New-Object 'System.Collections.Generic.Dictionary[string,int[]]'([System.StringComparer]::OrdinalIgnoreCase)
4. 先验证键是否存在
访问前先确认键是否在字典中,避免无意义的空输出:
if ($dictionary.ContainsKey("A1")) { $dictionary["A1"] } else { Write-Host "键'A1'不存在于字典中" }
内容的提问来源于stack exchange,提问作者abnerkanezzer
相关产品推荐
相关产品推荐

