比方说,我有一个字符串数组从执行该分割方法当,最好的方法,使字符串的精确副本在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