0
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 的值。每当我在之前添加 return 时它都会替换String.Format。我刚开始学习 C#,不知道是什么导致了这种奇怪的行为。

4

3 回答 3

11

string.Format返回格式化的字符串,您必须将其分配回您的变量:

something = string.Format("Some_Point({0},{1}),", item.X, item.Y);
于 2012-12-21T16:16:09.520 回答
5

如果你有很多字符串要附加到一个结果中,你应该使用命名空间中的StringBuilderSystem.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

于 2012-12-21T16:18:53.437 回答
1

string.Format返回一个字符串,所以:

something = string.Format(something, item.X, item.Y);
于 2012-12-21T16:17:15.597 回答