2014-09-25 105 views
0

如何查看Powershell中變量引用的基礎對象的內存地址?獲取Powershell變量的內存地址

在C#中我可以這樣做以下,但不知道怎麼做相當於在PowerShell中

int i; 
int* pi = &i; 

這樣做的原因是因爲這個例子給取決於腳本塊是不同的結果如下點源或使用呼叫運營商。變量名稱是相同的,當點源時,更新的值在腳本塊退出後保持不變。這讓我想知道,當點源實現使用原始變量時,調用操作符實現是否可以在變量的副本上工作。

PS C:\> $n = 1;&{$n = 2};$n 
1 
PS C:\> $n = 1;.{$n = 2};$n 
2 

如果我可以做這樣的事情,可能幫助我明白髮生了什麼......

PS C:\> $n = 1;&{$n.GetMemoryAddress()}; 
########## 
PS C:\> $n = 1;.{$n.GetMemoryAddress()}; 
########## 
+1

你打算怎樣處理一個shell變量的內存地址? – 2014-09-25 11:08:11

+0

我在試圖理解事情是如何工作的......我想看看在腳本塊內使用的變量是否指向同一個對象或其副本。我試圖理解點源腳本塊與在腳本塊上使用調用運算符的實現影響。 :) – samaspin 2014-09-25 11:20:12

+0

那麼你想要的是獲得*對象的地址*而不是*變量*? – 2014-09-25 11:21:27

回答

0

如果您真正問題是找出是否一個對象被引擎蓋下被複制,也許你不需要看看它的地址。要找出兩個對象是否完全相同的情況下,你可以只使用Object.ReferenceEquals

[System.Object]::ReferenceEquals($a, $b) 
+0

感謝馬蒂,但這不會在我的語境中工作,添加了一些我想要實現的更多細節:) – samaspin 2014-09-25 11:47:40

0

你並不需要看到的內存地址。調用操作符和點源腳本的確在不同的範圍內運行。我在手機上,不能輕鬆爲您提供鏈接,但運行get - help about_Scopes(或搜索相同)。