12

我正在尝试为带有一个参数的字符串编写扩展方法,并将参数附加到字符串的值。这是我想要的行为:

    public static void AddNumber(this string originalValue, string id)
    {
        List<string> ids = originalValue.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToString();
        ids.Add(id);
        string newValue = string.Join(",", ids);
        originalValue = newValue;
    }

然后我想按如下方式使用它:

        string testing = "";
        testing.AddNumber("1"); // value should be 1
        testing.AddNumber("2"); // value should be 1,2
        testing.AddNumber("3"); // value should be 1,2,3

问题是我看到了这个:

        string testing = "";
        testing.AddNumber("1"); // value is ""
        testing.AddNumber("2"); // value is ""
        testing.AddNumber("3"); // value is ""

现在我已经阅读了这个!StackOverflow 上的问题,我知道我正在做类似的事情。我无法替换字符串的整个值,我必须修改通过发送的字符串的内容......我只是找不到修改它的方法。我试过修改字符数组并且没有运气。有任何想法吗?

4

3 回答 3

21

字符串是不可变的。
这是根本不可能的。

于 2012-08-23T20:38:59.680 回答
7

要实现这一点,您必须通过this string originalValueas ref,但这是不可能的。但是,您可以使用普通方法执行此操作:

public static void AddNumber(ref string originalValue, string id)

但它必须像这样调用:

AddNumber(ref testing, "1");
于 2012-08-23T20:39:30.577 回答
5

您必须像这样使用此方法:

public static string AddNumber(this string originalValue, string id)
    {
        List<string> ids = originalValue.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToString();
        ids.Add(id);
        string newValue = string.Join(",", ids);
        return newValue;
    }

testing = testing.AddNumber("1");

但是您可以使用以下命令执行此操作StringBuilder

public static void AddNumber(this StringBuilder builder, string id)
{
    var originalValue = builder.ToString();
    if (originalValue.EndsWith(",") || string.IsNullOrEmpty(originalValue))
         builder.Append(id);
    else
         builder.Append("," + id);
}

var testing = new StringBuilder();
testing.AddNumber("1");
testing.AddNumber("2");
testing.AddNumber("3");

我也改变了算法。看起来效率不高。

于 2012-08-23T20:41:37.370 回答