Powershell Clone заказал Hashtable - PullRequest
       5

Powershell Clone заказал Hashtable

0 голосов
/ 31 августа 2018

Продолжение с этой темы .

Выпуск

Заказанная хеш-таблица не может быть клонирована.

Вопрос

Есть ли "легкий" способ сделать это? Я действительно нашел несколько примеров, которые кажутся слишком сложными для такой «простой» задачи.

MWE

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

выход

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

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

Хотя ответ Павла Дила клонирует заказанный хэш, он не является 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()
0 голосов
/ 31 августа 2018

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 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...