2

为什么这不起作用?

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 属性分配,有人可以帮我解释一下吗?

4

1 回答 1

2

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

于 2012-10-27T02:32:27.187 回答