比方說,我有一個字符串數組從執行該分割方法當,最好的方法,使字符串的精確副本在C#
string[] parsed = message.Split(' ');
然後,我要存儲在一個新的數組的一定值串
string name = parsed[3];
現在我使用的擴展方法除去從數組該字符串,該方法刪除指定索引處的值和轉移一切回到填充間隙
parsed = parsed.RemoveAt(3);
我知道,因爲字符串是C#中的引用類型,我的名字變量現在爲空,在搜索了一點之後,我被告知在C#中精確複製字符串是無用的。將name變量設置爲新實例以便它在.RemoveAt()調用後不會被刪除的最好和正確的方法是什麼?
編輯:
這是我迄今發現
string name = new string(parsed[3].ToCharArray());
parsed = parsed.Where((source, index) => index != 3).ToArray();
編輯提出的另一種方式的最佳途徑2:
請忽略此問題並閱讀批准的答案,我誤解了參考類型的工作方式。
不用擔心。 C#具有自動垃圾收集功能。讓收藏家做好工作,你可以擔心別的事情。你相信壓縮數組會改變你的局部變量的值是錯誤的。 –
從數組中刪除元素後,你認爲'name'是什麼? 'name'不關心數組發生了什麼 - 它仍然包含對您分配的字符串的引用。 –
那麼我必須誤解有關引用是如何工作的,即使從數組中刪除它,字符串仍然存在?據我所知,這將是垃圾收集,因爲沒有其他引用將指向它 – user7386753