Powershell:在新的xml变量或对象中保存xml更改,保持原始对象不变

时间:2017-07-13 03:11:11

标签: xml powershell variables object updates

我有一个来自Invoke-restmethod的xml变量。让我们称之为$object1

我想创建一个与$object2相同的新变量或对象$object1,但对值进行一些更改

以下是我的尝试:

$object2 = $object1

$object2.sweets.candy.Where({$_.lemondrop -gt 1}) | Foreach{$_.gumdrop = 20}

现在的问题是当我仔细检查$object1时,那里的值也发生了变化......我不想要那个

我只想让chage留在$object2

我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

您需要克隆 $object2 = $object1.Clone() 才能获得它的独立副本:

[System.Xml.XmlDocument]

[int]是一个引用类型(而不是值类型,例如$object2 = $object1 ),这意味着:

$object2

只需将$object1指向与[object]::ReferenceEquals($object1, $object2) 完全相同的对象 您可以按如下方式验证:

=

一般而言:

    带有值类型实例的
  • =复制实际值,即隐式克隆。
  • 带有引用类型实例的
  • .IsValue会将引用复制到该实例,即它会创建对同一实例的另一个引用。

要确定给定类型是值类型还是引用类型,请使用类型&#39; s布尔# Inspect a type directly. > [System.Xml.XmlDocument].IsValueType False # -> a *reference* type # Inspect a type via an instance thereof: > $xml = [xml] '<xml/>'; $xml.GetType().IsValueType False 属性:

{{1}}