我在制作扩展方法时遇到问题;首先,这是代码:
public static string Replace(this string str, string[] oldValues, string newValue)
{
string result = str;
for (int i = 0; i < oldValues.Length; i++)
{
result.Replace(oldValues[i], newValue);
}
return result;
}
可悲的是,当我像这样使用它时,上述方法无效:
if (line.StartsWith("#include"))
{
string[] valuesToReplace = { "include", "<", ">", "#" };
line = line.Replace(valuesToReplace, "");
}
我只是......为什么这不起作用感到困惑;有人可以帮帮我吗?
谢谢:)
答案 0 :(得分:7)
您只能创建一个新的。 当您使用replace或类似更改字符串时,将创建并返回新副本。因此,您必须保存返回的字符串,以便能够进一步编辑它。
public static string Replace(this string str, string[] oldValues, string newValue)
{
string result = str;
for (int i = 0; i < oldValues.Length; i++)
{
result = result.Replace(oldValues[i], newValue);
}
return result;
}
答案 1 :(得分:1)
它不起作用,因为Replace不会修改您发送给它的字符串。在C#中,字符串一旦创建就无法更改。相反,String.Replace在完成其工作后创建一个全新的字符串,并将其返回。
将其更改为: result = result.Replace(oldValues [i],newValue);
安德烈打败了我:)