2010-05-14 78 views
4

是否有可能更改它添加後bar內存儲的值?關於拳擊/ c#的基本問題#

我試過'裝箱'字符串foo,但它不起作用。

string foo = "aaaaaaa"; 
var bar = new System.Web.UI.HtmlControls.HtmlGenericControl("div") { InnerHtml =foo }; 
foo = "zzzzzz"; 
plcBody.Controls.Add(bar);//want this to contain 'zzzzzz' 
+6

快速評論,因爲尼克的回答解釋說,除了我對措辭的挑剔投訴之外 - 這與拳擊沒有任何關係。字符串是一個引用類型;拳擊只有在值類型時纔會發揮作用。 – 2010-05-14 11:46:44

回答

7

要做到這一點,你必須設置的值,就像這樣:

string foo = "aaaaaaa"; 
var bar = new System.Web.UI.HtmlControls.HtmlGenericControl("div") { InnerHtml = foo }; 
bar.InnerHtml = "zzzzzz"; 
plcBody.Controls.Add(bar); 

Strings themselves are immutable(在.NET中至少,這並不是普遍適用的),你不能改變它後它已通過...您通過了變量的,這是一個字符串引用 - 您尚未傳遞對原始變量的引用,因此更改原始變量以引用不同的字符串不會做任何事情。當您更改變量時,您將更改foo引用的字符串,而不是編輯其原始字符串,因爲這是不可變的。

如果它更容易想到的,你傳遞「是什麼意思foo」不「foo本身」,所以一旦該字符串進入無論你傳遞到,它有沒有關係給原來的變量。

+0

掛起 - 它*是*對傳入的原始字符串對象的引用...但您無法更改字符串的內容,這正是因爲字符串是不可變的。它不是原始*變量*的別名,但這是另一回事。值得區分一個變量和它的值 - 'foo'是一個變量,它的值是一個字符串引用;它不是一個字符串(或一個字符串引用)本身。 – 2010-05-14 11:42:01

+0

感謝您的回覆。當我傳遞一個字符串作爲方法參數,前綴'ref'關鍵字時,它*會*改變原來的值,這是否是一些.net欺騙? – maxp 2010-05-14 11:43:32

+0

@maxp - 在這種情況下,你傳遞的是對變量的引用,@Jon - 我會試着讓它更清晰一點,沒有意識到你可以這樣讀取它,給我一分鐘 – 2010-05-14 11:44:30