PowerShell将哈希表转换成只读的词典


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

执行过程中分别会遇到两条错误:

  1. 找不到“Add”的重载,参数计数为:“2”。
  2. 无法对 System.Collections.ObjectModel.ReadOnlyDictionary`2[System.String,System.Object] 类型的对象进行索引。

证明目标完成。

 

本文链接: https://www.pstips.net/convertto-readonlydictionary.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

关于 Mooser Lee

我是一个Powershell的爱好者,创建了PowerShell中文博客,热衷于Powershell技术的搜集和分享。本站部分内容来源于互联网,不足之处敬请谅解,并欢迎您批评指正。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注