我正在尝试为一个带有一个参数的字符串创建一个扩展方法,并将该参数附加到字符串的值。这是我想要的行为:
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上发布这个问题,我知道我在做类似的事情。我无法替换字符串的整个值,我必须修改通过发送的字符串的内容...我只是找不到修改它的方法。我已经尝试修改字符数组并没有运气。有什么想法吗?
答案 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");
我也改变了算法。它看起来效率不高。