Здравствуйте, Andrei N.Sobchuck, Вы писали:
ANS>Не совсем понял. Я так понял, что при дозаписи в StringBuffer меняется полученная раннее строка. Я не правильно понял суть ошибки?
Да. Неправильно. При любом дополнительном изменении StringBuilder после вызова ToString() выделяется новый буфер для изменений. Проблема примерно такая:
StringBuilder strBuilder=new StringBuilder("строка");
string str1=strBuilder.ToString();
string str2=strBuilder.ToString();
......
//здесь unsafe код который меняет строку
unsafe{fixed(char* pstr=str1){pstr[1]='F';}};
....
if (str2!='строка') Console.WriteLine("непонятный обломс");
этот код идентичен такому
StringBuilder strBuilder=new StringBuilder("строка");
string str1=strBuilder.ToString();
string str2=str1;
......
//здесь unsafe код который меняет строку
unsafe{fixed(char* pstr=str1){pstr[1]='F';}};
....
if (str2!='строка') Console.WriteLine("здесь мы хорошо знаем чем рискуем так как сознательно конкатенировали");
С уважением, Gleb.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>