为什么这不起作用?
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属性分配,是否有人可以为我解释这一点?
答案 0 :(得分:2)
呃,我无法相信PowerShell在这些结构上定义了setter。 .NET中的结构通常应该是不可变的,以避免像您在上面看到的那样混淆。有关详细信息,请参阅此SO question。结构按值传递。修改WindowSize结构时,您正在修改它的副本。分配整个结构时,例如使用$newsize
它是有效的,因为您要为WindowSize属性分配一个全新的struct值。