C#在扩展方法中替换原始字符串的值

时间:2012-08-23 20:38:01

标签: c#

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

    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 ""

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

3 个答案:

答案 0 :(得分:18)

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

答案 1 :(得分:6)

要实现这一点,您必须将this string originalValue作为ref传递,但这是不可能的。但是,您可以使用常规方法执行此操作:

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

但必须像这样调用:

AddNumber(ref testing, "1");

答案 2 :(得分:4)

您必须使用此方法:

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

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