public override string ToString()
{
string token = "something";
foreach (something item in this)
{
something = something + "Some_Point({0},{1}),";
string.Format(something, item.X, item.Y);
}
return something+= "anything";
}
这是自定义集合的重写ToString()
方法。这里的问题是String.Format
没有替换X和Y的值。只要我在String.Format
之前添加return,它就会替换它。我刚刚开始学习C#,并且不知道是什么导致了这种奇怪的行为。
答案 0 :(得分:11)
string.Format
返回格式化字符串,您必须将其分配回您的变量:
something = string.Format("Some_Point({0},{1}),", item.X, item.Y);
答案 1 :(得分:5)
如果要在单个结果中附加大量字符串,则应使用StringBuilder
命名空间中的System.Text
类。这是一个很好的实践,因为string
对象是不可变的,每次更改内容时,都会在堆上创建一个新实例。尝试做这样的事情:
using System.Text;
...
public override string ToString()
{
StringBuilder s = new StringBuilder("something initial if you need");
foreach (something item in this)
{
s.AppendFormat("Some_Point({0},{1}),", item.X, item.Y);
}
s.Append("something else");
return s.ToString();
}
如果您想了解更多有关避免字符串连接的原因,请查看以下文章: http://msdn.microsoft.com/en-us/library/ms182272(v=vs.80).aspx
答案 2 :(得分:1)
string.Format
返回一个字符串,所以:
something = string.Format(something, item.X, item.Y);