2010-11-02 19 views
3

下午好字符串和引用可能愚蠢的問題,約在C#

我很抱歉,如果這個問題是太傻了,但我不知道很多(幾乎所有的東西)有關.NET的內存管理系統,和我真的需要澄清這個疑問......我有一個Dictionary<String, Int32>,我需要使用,現在我需要一棵樹,其節點用同一字典中的字符串標記。因爲當然,我不想存儲冗餘信息,所以我怎樣才能確保節點的標籤指向與字典密鑰相同的引用?

非常感謝你,

+0

只與切線相關,但字符串總是作爲.NET中的引用傳遞的原因是因爲.NET字符串實例是不可變的。在C中,傳遞char *可能很危險,因爲其他代碼可能會修改緩衝區,假設它是一個副本。您可以通過依靠'const'修飾符來阻止修改,從而有所保護。在.NET中,所有字符串本質上都是'const',可以自由傳遞。 – 2010-11-02 14:48:53

回答

4

字符串是引用類型,所以除非你做一些事情,打破它,這將是默認的。

例如,對於一個asp.net頁面(您沒有指定,我知道),客戶端顯示的字符串不能與服務器內存中的字符串具有相同的引用。

3

您可以使用這樣的事情:

TreeNode node = new TreeNode(); 
node.Text = dictionary.Keys[0]; 

這將是相同的實例。

+0

他說他也想回到字典中,所以你也應該將Name屬性設置爲值。 – Vercas 2010-11-02 17:15:13

1

由於String是一個引用類型,所以當使用對String對象的引用來引用字典條目時,您必須非常謹慎。你顯然可以,但有時候不可能(就像Hans提到的不同的客戶端 - 服務器引用一樣)如果你知道你在做什麼,使用引用,但是如果不知道,你總是可以通過值('Equals'方法)比較字符串參考字典元素。

+3

爲了執行按值比較,字符串重寫了等於運算符。 – 2010-11-02 14:37:55

+0

好點 - 'Equals'方法只是按值比較字符串的一個例子,但您也可以使用'=='。 – 2010-11-02 14:44:09

+0

我不確定你指的是什麼問題Piotr,你能舉個例子嗎?記住字符串是不可變的,所以我不確定你會在這裏找到什麼問題。 – 2010-11-02 14:44:40