我想創建自定義PSObject的新實例。我有一個創建爲PSObject的Button對象,我想創建一個新的對象Button2,它具有與Button相同的成員,但我找不到如何克隆原始對象而不使其在原始對象中引用(如果更改Button2中的屬性也會在Button中更改)。有沒有辦法通過一些Clone()方法來使用哈希表和數組呢?如何創建PSObject對象的新克隆實例
回答
確實沒有克隆方法!然而,那裏是一個意志......
$o = New-Object PsObject -Property @{ prop1='a' ; prop2='b' }
$o2 = New-Object PsObject
$o.psobject.properties | % {
$o2 | Add-Member -MemberType $_.MemberType -Name $_.Name -Value $_.Value
}
$o.prop1 = 'newvalue'
$o
$o2
輸出:
prop2 prop1
----- -----
b newvalue
b a
這是奇怪的做到這一點,我沒有克隆方法availabl即看起來好像我打包物體的方式存在問題。當我使用你的例子我有克隆方法可用,但我先創建空對象,然後通過添加成員添加所有成員。所以當我使用: $ object = New-Object PSObject $ object |添加成員NoteProperty propVal「test」 powershell說[System.Management.Automation.PSCustomObject]不包含方法Close。 – 2012-03-06 10:35:38
@JosefNemec我不好使用錯誤的語法來創建PsObject。你沒有克隆方法是正確的。所以要解決這個問題,你可以將所有的原始屬性複製到新的對象。 – 2012-03-06 11:17:24
很好,非常感謝! – 2012-03-06 12:05:08
另一種可能性:
$o1 = New-Object PsObject -Property @{ prop1='a' ; prop2='b' }
$o2 = $o1 | select *
$o2.prop1 = 'newvalue'
$o1.prop1
$o2.prop1
a
newvalue
最簡單的方法是使用的PsObject
==>$o2 = $o1.PsObject.Copy()
的Copy方法
$o1 = New-Object -TypeName PsObject -Property @{
Fld1 = 'Fld1';
Fld2 = 'Fld2';
Fld3 = 'Fld3'}
$o2 = $o1.PsObject.Copy()
$o2 | Add-Member -MemberType NoteProperty -Name Fld4 -Value 'Fld4'
$o2.Fld1 = 'Changed_Fld'
$o1 | Format-List
$o2 | Format-List
輸出:
Fld3 : Fld3
Fld2 : Fld2
Fld1 : Fld1
Fld3 : Fld3
Fld2 : Fld2
Fld1 : Changed_Fld
Fld4 : Fld4
出於某種原因PSObject.Copy()並不適用於所有對象類型的工作。創建對象的副本另一種解決方案是將其轉換爲/從Json的然後將其保存在一個新的變量:
$CustomObject1 = [pscustomobject]@{a=1; b=2; c=3; d=4}
$CustomObject2 = $CustomObject1 | ConvertTo-Json -depth 100 | ConvertFrom-Json
$CustomObject2 | add-Member -Name "e" -Value "5" -MemberType noteproperty
$CustomObject1 | Format-List
$CustomObject2 | Format-List
這是迄今爲止唯一可以深入克隆包含其他psobject的psobject的唯一答案。 – aggieNick02 2017-10-06 19:30:59
的實用工具類將這個或定義它在你的當前部分
function clone($obj)
{
$newobj = New-Object PsObject
$obj.psobject.Properties | % {Add-Member -MemberType NoteProperty -InputObject $newobj -Name $_.Name -Value $_.Value}
return $newobj
}
用法:
$clonedobj = clone $obj
- 1. 如何在Smart Client中創建新對象或克隆ListGrid
- 2. 如何銷燬unity3d中的實例化(克隆)對象?
- 3. 創建新的實例對象
- 4. 如何克隆js對象?
- 5. 如何克隆Dictionary對象?
- 6. 如何創建對象的實例?
- 7. 如何在基類中創建對象的克隆?
- 8. 如何創建一些對象的克隆已更改?
- 9. 如何創建Word文檔對象的克隆?
- 10. 克隆對象
- 11. 新陣列(_)填充(對象)不創建對象的新實例
- 12. 克隆對象克隆與實現可複製的接口
- 13. 如何在CKeditor中克隆實例?
- 14. 創建對象實例
- 15. 創建一個抽象類的克隆
- 16. 如何在Java中動態地創建對象的新實例?
- 17. 如何在javascript中創建對象的新實例
- 18. 如何從Python中的類對象創建新實例
- 19. 如何在ios中創建對象的新實例?
- 20. 如何測試已創建對象的新實例?
- 21. 如何從其基類的實例創建一個新對象?
- 22. 在創建防禦副本時創建新對象而不是克隆
- 23. 克隆一個類的實例(顯示對象)
- 24. 克隆Java對象
- 25. 克隆dom.Document對象
- 26. PHP - 對象克隆
- 27. 如何克隆as3中的對象
- 28. 如何克隆C#中的DateTime對象?
- 29. 克隆EC2 Ubuntu實例
- 30. 實體對象:克隆和插入
轉到我的回答如果你想有一個函數'clone'爲您 – 2017-05-25 23:45:37