PowerShell对哈希表(Hashtable)进行了优化,可以直接使用@{a=1;b=2}这样的格式声明,但是对于词典(Dictionary),可没有优化声明,更别提只读的词典了。这里说的只读的词典可不是只给词典变量加上一个readonly选项。而是不能加键值对,也不能更改键值对。
既然哈希表声明方便,那就巧借东风把哈希表转换成词典,进而再转换成只读词典,函数如下:
function ConvertTo-ReadOnlyDictionary([System.Collections.Hashtable]$Hashtable=@{}) { $dict=New-Object 'System.Collections.Generic.Dictionary[[string],[object]]' $Hashtable.Keys.ForEach({$dict.Add($_,$Hashtable[$_])}) return [System.Collections.ObjectModel.ReadOnlyDictionary[[string],[object]]]$dict }
同时也再次温习了PowerShell泛型声明。测试一下吧:
$readonlyDict=ConvertTo-ReadOnlyDictionary -Hashtable @{a=44;b=55} $readonlyDict.Add('c','pstips.net') $readonlyDict['a']=88
执行过程中分别会遇到两条错误:
- 找不到“Add”的重载,参数计数为:“2”。
- 无法对 System.Collections.ObjectModel.ReadOnlyDictionary`2[System.String,System.Object] 类型的对象进行索引。
证明目标完成。
本文链接: https://www.pstips.net/convertto-readonlydictionary.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!