PowerShell属性值分配

时间:2012-10-27 02:14:58

标签: .net powershell

为什么这不起作用?

PS deployables:\> $host.ui.rawui.windowsize.width
170
PS deployables:\> $host.ui.rawui.windowsize.width = 100
PS deployables:\> $host.ui.rawui.windowsize.width
170

但是这样做了?

PS deployables:\> $host.ui.rawui.windowsize.width
170
PS deployables:\> $newsize = $host.ui.rawui.windowsize
PS deployables:\> $newsize.width = 100
PS deployables:\> $host.ui.rawui.windowsize = $newsize
PS deployables:\> $host.ui.rawui.windowsize.width
100

我不确定我是否误解了PowerShell或.NET属性分配,是否有人可以为我解释这一点?

1 个答案:

答案 0 :(得分:2)

呃,我无法相信PowerShell在这些结构上定义了setter。 .NET中的结构通常应该是不可变的,以避免像您在上面看到的那样混淆。有关详细信息,请参阅此SO question。结构按值传递。修改WindowSize结构时,您正在修改它的副本。分配整个结构时,例如使用$newsize它是有效的,因为您要为WindowSize属性分配一个全新的struct值。