2012-10-27 80 views
2

爲什麼這不起作用?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屬性賦值,可能有人提供一些線索這對我來說?

回答

2

呃,我無法相信PowerShell在這些結構上定義的setter。 .NET中的結構通常應該是不可變的,以避免混淆,就像你上面看到的那樣。有關更多詳細信息,請參閱此SO question。結構通過價值傳遞。當您修改WindowSize結構時,您正在修改它的一個副本。當你指定整個結構例如使用$newsize它的工作原理是因爲您將一個全新的結構值分配給WindowSize屬性。