Проблема вставки строки в c # - PullRequest
1 голос
/ 23 марта 2011

Я пытаюсь вставить строку в позицию для строки C #, ее ошибка

вот фрагмент.

  if(strCellContent.Contains("<"))
   {
         int pos = strCellContent.IndexOf("<");
         strCellContent.Insert(pos,"&lt;");
   }

подскажите пожалуйста решение

Ответы [ 6 ]

7 голосов
/ 23 марта 2011

Gunner и Rhapsody дали правильные изменения, но стоит знать , почему ваша первоначальная попытка не удалась.Тип String является неизменным - если у вас есть строка, вы не можете изменить ее содержимое.Все методы, которые выглядят как будто они меняют на самом деле просто возвращают новое значение.Например, если у вас есть:

string x = "foo";
string y = x.Replace("o", "e");

строка, на которую ссылается x, все равно будет содержать символы "foo" ... но строка, на которую ссылается y, будет содержать символы "fee".

Это влияет на все варианты использования строк, а не только на конкретную ситуацию, с которой вы сейчас работаете (которую, безусловно, лучше обработать, используя Replace, или, что еще лучше, вызов библиотеки, который знает, как делать всепобег вам нужно).

7 голосов
/ 23 марта 2011

Возвращаемое значение содержит новую строку, которую вы хотите.

strCellContent = strCellContent.Insert(pos,"&lt;");
2 голосов
/ 23 марта 2011

Я думаю, что вам может быть лучше с Replace вместо Insert:

strCellContent = strCellContent.Replace("<", "&lt;");

Возможно, делать Server.HtmlEncode() еще лучше:

strCellContent = Server.HtmlEncode(strCellContent);
1 голос
/ 23 марта 2011

Когда я смотрю на ваш код, думаю, что вы хотите сделать замену, но попробуйте это:

 if(strCellContent.Contains("<"))    
 {
      int pos = strCellContent.IndexOf("<");
      strCellContent = strCellContent.Insert(pos,"&lt;");
} 
0 голосов
/ 23 марта 2011

Как другие объяснили с кодом, я добавлю, что

Значением объекта String является содержание последовательной коллекции, и это значение является неизменным (то есть это только для чтения). Для получения дополнительной информации об неизменяемости строк см. Раздел Immutability и StringBuilder Class.

от: http://msdn.microsoft.com/en-us/library/system.string.aspx

0 голосов
/ 23 марта 2011

.Contains не очень хорошая идея, потому что вам нужно знать позицию.Это решение будет более эффективным.

int pos = strCellContent.IndexOf("<");
if (pos >= 0)   //that means the string Contains("<")
{
   strCellContent = strCellContent.Insert(pos,"&lt;");  //string is immutable
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...