Скажут, у меня есть массив строк от выполнения этого метода SplitКогда и лучший способ сделать точные копии строк в C#
string[] parsed = message.Split(' ');
И тогда я хочу сохранить определенное значение этого массива в новом строка
string name = parsed[3];
Теперь я удалить эту строку из массива, используя метод расширения, этот метод удаляет значение по указанному индексу и сдвигает все назад, чтобы заполнить пробел
parsed = parsed.RemoveAt(3);
Я знаю, что поскольку строки являются ссылочными типами в C#, моя переменная имени теперь равна null, после небольшого поиска мне сказали, что делать точные копии строк в C# бесполезно. Каков наилучший и правильный способ установки переменной имени в качестве нового экземпляра, чтобы он не удалялся после вызова .RemoveAt()?
EDIT:
Это лучший способ, который я нашел до сих пор
string name = new string(parsed[3].ToCharArray());
Другой способ, предложенный Willy David Jr
parsed = parsed.Where((source, index) => index != 3).ToArray();
EDIT 2:
Пожалуйста, игнорировать этот вопрос и прочитал одобренный ответ, я неправильно понял, как работают ссылочные типы.
Просто не беспокойтесь об этом. C# имеет автоматическую сборку мусора. Пусть коллекционер выполнит свою работу, и вы можете беспокоиться о чем-то другом. Ваше убеждение, что уплотнение массива меняет значение вашей локальной переменной, является ложным. –
Что заставляет вас думать, что 'name' будет null после удаления элемента из массива? 'name' не заботится о том, что происходит с массивом - он все еще содержит ссылку на строку, которую вы ему назначили. –
Ну, тогда я должен неправильно понимать, как работают ссылки, строка будет существовать даже после того, как я удалю ее из массива? насколько я знаю, это будет сбор мусора, потому что никакие другие ссылки не будут указывать на него – user7386753