Powershell Clone Ordered Hashtable

问题描述 投票:1回答:2

来自this thread的后续行动。

问题

无法克隆有序哈希表。

是否有捷径可寻?我确实发现了一些对于这种“简单”任务看起来过于复杂的例子。

MWE

$a = [ordered]@{}
$b = $a.Clone()

产量

Method invocation failed because [System.Collections.Specialized.OrderedDictionary] does not contain a method named 'Clone'.

powershell hashtable
2个回答
3
投票

OrderedDictionary不包含Clone方法(另见ICloneable接口)。你必须手动完成:

$ordered = [ordered]@{a=1;b=2;c=3;d=4}
$ordered2 = [ordered]@{}
foreach ($pair in $ordered.GetEnumerator()) { $ordered2[$pair.Key] = $pair.Value }

2
投票

虽然PawełDyl给出的答案确实克隆了有序哈希,但它不是Deep-Clone

为此,您需要这样做:

# create a deep-clone of an object
$ms = New-Object System.IO.MemoryStream
$bf = New-Object System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
$bf.Serialize($ms, $ordered)
$ms.Position = 0
$clone = $bf.Deserialize($ms)
$ms.Close()
© www.soinside.com 2019 - 2024. All rights reserved.