如何使powershell使用对象引用添加成员?
我在添加成员和引用方面遇到了一些问题。它们不在一起工作:-( 守则:如何使powershell使用对象引用添加成员?,powershell,Powershell,我在添加成员和引用方面遇到了一些问题。它们不在一起工作:-( 守则: function ObjPropAdd([ref]$obj, $name, $value) { # Failed: object reference does not work $obj | Add-Member –MemberType NoteProperty –Name $name –Value $value } function ObjPropRemove([ref]$obj, $name) {
function ObjPropAdd([ref]$obj, $name, $value)
{
# Failed: object reference does not work
$obj | Add-Member –MemberType NoteProperty –Name $name –Value $value
}
function ObjPropRemove([ref]$obj, $name)
{
# Success: object reference is work
$obj.value.PSObject.Properties.Remove($name)
}
$obj = [PsCustomObject]@{ var1 = 'val1'; var2 = 'val2' }
Write-Host ($obj | ConvertTo-Json)
$obj | Add-Member –MemberType NoteProperty –Name "var3" –Value "val3" # Success: Add-Member is works
Write-Host ($obj | ConvertTo-Json)
ObjPropAdd ([ref]$obj) "var4" "val4" # Failed: object reference does not work
Write-Host ($obj | ConvertTo-Json)
ObjPropRemove ([ref]$obj) "var1" # Success: object reference is works
Write-Host ($obj | ConvertTo-Json)
结果:
{
"var1": "val1",
"var2": "val2"
}
{
"var1": "val1",
"var2": "val2",
"var3": "val3"
}
{
"var1": "val1",
"var2": "val2",
"var3": "val3"
}
{
"var2": "val2",
"var3": "val3"
}
我的变量var4
丢失
谢谢。如果您在函数中设置断点,您将看到,
$obj
不是您的对象,而是一个包装器。无论如何,显然不需要[ref]
那么您为什么要使用它呢?是的,这确实是PSReference而不是PsCustomObject。这是reference。但无论如何,问题仍然存在:如何使用[ref]$obj
withAdd Member
?关于原因-在大多数情况下,当我通过支持函数对对象进行操作时,我更喜欢引用而不是返回对象。不要忘记返回值-这是复制(和开销)例如,如果您进行了100万次修改,并且在每次修改中返回对象,那么您将有100万次冗余的objectcopy操作(对于小对象来说可能不是大问题,但是对于大对象来说却是大问题);-)对象始终是引用,因此不需要[ref]
。正如您在调试器中看到的,传递的对象是$obj.Value
注意,使用管道和调用函数正是使10000000次重复变慢的原因。我不知道。非常感谢。如果在函数中设置断点,您将看到,$obj
不是您的对象,而是一个包装器。无论如何,显然没有必要使用[ref]
,那么为什么要使用它呢?是的,实际上这是PSReference而不是PsCustomObject。这是参考资料。但在任何情况下,这个问题仍然有效:如何将[ref]$obj
与添加成员一起使用?关于原因-在大多数情况下,当我通过支持函数处理对象时,我更喜欢引用而不是返回对象。不要忘记返回值-这是复制(和开销)。例如,如果您进行了100万次修改,并且在每次修改中返回对象,那么您将有100万次冗余的objectcopy操作(对于小对象来说可能不是大问题,但是对于大对象来说问题很大);-)对象始终是引用,因此不需要[ref]
。正如您在调试器中看到的,传递的对象是$obj.Value
注意,使用管道和调用函数正是使10000000次重复变慢的原因。我不知道。非常感谢。