c#中的字符串插入问题

时间:2011-03-23 07:03:50

标签: c# .net asp.net string

我正在尝试在C#字符串的位置插入一个字符串,其失败

这是片段。

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

请告诉我解决方案

6 个答案:

答案 0 :(得分:7)

返回值包含您想要的新字符串。

strCellContent = strCellContent.Insert(pos,"&lt;");

答案 1 :(得分:7)

Gunner和Rhapsody已经给出了正确的更改,但值得知道为什么您的原始尝试失败了。 String类型是不可变的 - 一旦你有了一个字符串,你就无法改变它的内容。所有看起来的方法就像他们正在改变它实际上只返回一个新值。例如,如果你有:

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

字符串x引用仍将包含字符“foo”...但字符串y引用将包含字符“费用”。

这会影响字符串的所有使用,而不仅仅是您现在正在查看的特定情况(使用Replace肯定会更好地处理这种情况,或者更好的是仍然知道如何执行所有转义的库调用你需要)。

答案 2 :(得分:2)

我认为使用Replace代替Insert可能会更好:

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

也许做Server.HtmlEncode()更好:

strCellContent = Server.HtmlEncode(strCellContent);

答案 3 :(得分:1)

当我查看你的代码时,我认为你想要做一个替换,但试试这个:

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

答案 4 :(得分:0)

.Contains在这里不是一个好主意,因为你需要知道这个位置。这个解决方案会更有效率。

int pos = strCellContent.IndexOf("<");
if (pos >= 0)   //that means the string Contains("<")
{
   strCellContent = strCellContent.Insert(pos,"&lt;");  //string is immutable
}

答案 5 :(得分:0)

正如其他人用代码解释的那样,我将添加

  

String对象的值是   顺序集合的内容,   并且该值不可变(即,   它是只读的)。   有关字符串不变性的更多信息,请参阅Immutability and the StringBuilder类部分。

来自:http://msdn.microsoft.com/en-us/library/system.string.aspx