Я хочу создать новый экземпляр моего пользовательского объекта PSObject. У меня есть объект Button, созданный как PSObject, и я хочу создать новый объект Button2, который имеет те же элементы, что и Button, но я не могу найти способ клонирования исходного объекта, не ссылаясь на исходный объект (если я изменяю свойство в Button2 также изменяется в Button). Есть ли способ сделать это так же, как с hashtables и массивами с помощью некоторого метода Clone()?Как создать новый экземпляр 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
это странно, я не метод Clone availabl е. Похоже, есть проблема в том, как я разбиваю объект. Когда я использую ваш пример, у меня есть метод Clone, но я сначала создаю пустой объект, а затем добавляю всех участников через Add-Member. Поэтому, когда я использую: $ object = New-Object PSObject $ object | Add-Member NoteProperty propVal "test" powershell говорит, что [System.Management.Automation.PSCustomObject] не содержит метода Close. –
@JosefNemec Плохо я использовал неправильный синтаксис для создания PsObject. Вы правы, что нет метода клонирования. Поэтому, чтобы обойти это, вы можете просто скопировать все свойства оригиналов в новый объект. –
Отлично работает, спасибо! –
Другая возможность:
$o1 = New-Object PsObject -Property @{ prop1='a' ; prop2='b' }
$o2 = $o1 | select *
$o2.prop1 = 'newvalue'
$o1.prop1
$o2.prop1
a
newvalue
Самый простой способ заключается в использовании Copy методом PsObject
==>$o2 = $o1.PsObject.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, который содержит другие psobjects. – aggieNick02
Put это в классе Utility или определить его в текущем разделе
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. Создать новый экземпляр класса объекта
- 2. как создать новый экземпляр объекта класса динамически
- 3. Javascript: Как создать новый экземпляр объекта-прототипа?
- 4. Как создать новый экземпляр объекта в реале?
- 5. Clone экземпляр для самостоятельного объекта
- 6. Как создать новый экземпляр класса?
- 7. Delphi 7: создать новый экземпляр неизвестного объекта
- 8. Android намерение создать новый экземпляр объекта
- 9. Как создать новый экземпляр записи?
- 10. Создать новый экземпляр объекта в другом классе
- 11. Свойство Grid создать новый экземпляр объекта
- 12. Как создать новый экземпляр, копирующий значения из другого объекта PHP
- 13. , возвращающий новый экземпляр объекта
- 14. Как создать экземпляр объекта?
- 15. Как создать новый экземпляр динамически?
- 16. Как создать новый экземпляр ItemCollection
- 17. Как создать новый экземпляр коллекции
- 18. как создать новый экземпляр PIXI.texture
- 19. создать новый экземпляр области
- 20. Как создать экземпляр объекта MediaDrm
- 21. Как создать экземпляр объекта ObjectSet?
- 22. Создать новый экземпляр настроек
- 23. Создать новый weka Экземпляр
- 24. Создать новый экземпляр AnonymousType
- 25. новый экземпляр объекта Перерывы Связывание
- 26. Как создать новый экземпляр объекта при использовании шаблона модуля?
- 27. Как я могу динамически создать новый экземпляр объекта в Java?
- 28. Как создать новый экземпляр объекта для ng-repeat
- 29. Как создать новый экземпляр DatabaseError в Firebase?
- 30. нового объекта PSObject добавить значение
Перейти на мой ответ, если вы хотите функцию 'clone', чтобы сделать это для вас –