Я знаю, что строки неизменяемы, и любые изменения в строке просто создают новую строку в памяти (и маркируют старую как свободную). Тем не менее, мне интересно, звучит ли моя логика ниже в том, что вы на самом деле можете в круговом режиме изменить содержимое строки.
const string baseString = "The quick brown fox jumps over the lazy dog!";
//initialize a new string
string candidateString = new string('\0', baseString.Length);
//Pin the string
GCHandle gcHandle = GCHandle.Alloc(candidateString, GCHandleType.Pinned);
//Copy the contents of the base string to the candidate string
unsafe
{
char* cCandidateString = (char*) gcHandle.AddrOfPinnedObject();
for (int i = 0; i < baseString.Length; i++)
{
cCandidateString[i] = baseString[i];
}
}
Действительно ли этот подход изменяет содержимое candidateString
(без создания нового кандидатаString в памяти), или среда выполнения просматривает мои трюки и воспринимает ее как обычную строку?