为什么这个扩展方法不起作用(C#,字符串数组)

时间:2017-05-16 12:16:37

标签: c#

我在制作扩展方法时遇到问题;首先,这是代码:

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, "");
}

我只是......为什么这不起作用感到困惑;有人可以帮帮我吗?

谢谢:)

2 个答案:

答案 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;
}

You can read more about System.String here

答案 1 :(得分:1)

它不起作用,因为Replace不会修改您发送给它的字符串。在C#中,字符串一旦创建就无法更改。相反,String.Replace在完成其工作后创建一个全新的字符串,并将其返回。

将其更改为: result = result.Replace(oldValues [i],newValue);

安德烈打败了我:)