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

1 つの結果に追加する文字列が多数ある場合は、名前空間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();
}

文字列の連結を避ける理由について詳しく知りたい場合は、次の記事を参照して ください。

于 2012-12-21T16:18:53.437 に答える
1

string.Format文字列を返すので、次のようになります。

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