我正在尝试在C#字符串的位置插入一个字符串,其失败
这是片段。
if(strCellContent.Contains("<"))
{
int pos = strCellContent.IndexOf("<");
strCellContent.Insert(pos,"<");
}
请告诉我解决方案
答案 0 :(得分:7)
返回值包含您想要的新字符串。
strCellContent = strCellContent.Insert(pos,"<");
答案 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("<", "<");
也许做Server.HtmlEncode()
更好:
strCellContent = Server.HtmlEncode(strCellContent);
答案 3 :(得分:1)
当我查看你的代码时,我认为你想要做一个替换,但试试这个:
if(strCellContent.Contains("<"))
{
int pos = strCellContent.IndexOf("<");
strCellContent = strCellContent.Insert(pos,"<");
}
答案 4 :(得分:0)
.Contains
在这里不是一个好主意,因为你需要知道这个位置。这个解决方案会更有效率。
int pos = strCellContent.IndexOf("<");
if (pos >= 0) //that means the string Contains("<")
{
strCellContent = strCellContent.Insert(pos,"<"); //string is immutable
}
答案 5 :(得分:0)
正如其他人用代码解释的那样,我将添加
String对象的值是 顺序集合的内容, 并且该值不可变(即, 它是只读的)。 有关字符串不变性的更多信息,请参阅Immutability and the StringBuilder类部分。
来自:http://msdn.microsoft.com/en-us/library/system.string.aspx