我有一个来自Invoke-restmethod
的xml变量。让我们称之为$object1
我想创建一个与$object2
相同的新变量或对象$object1
,但对值进行一些更改
以下是我的尝试:
$object2 = $object1
$object2.sweets.candy.Where({$_.lemondrop -gt 1}) | Foreach{$_.gumdrop = 20}
现在的问题是当我仔细检查$object1
时,那里的值也发生了变化......我不想要那个
我只想让chage留在$object2
我在这里做错了什么?
答案 0 :(得分:2)
您需要克隆 $object2 = $object1.Clone()
才能获得它的独立副本:
[System.Xml.XmlDocument]
[int]
是一个引用类型(而不是值类型,例如$object2 = $object1
),这意味着:
$object2
只需将$object1
指向与[object]::ReferenceEquals($object1, $object2)
完全相同的对象
您可以按如下方式验证:
=
一般而言:
=
复制实际值,即隐式克隆。.IsValue
会将引用复制到该实例,即它会创建对同一实例的另一个引用。要确定给定类型是值类型还是引用类型,请使用类型' 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}}