0

以下のコードは単純なことをしています。API の生データを操作し、それをビュー モデルのプロパティにバインドします。

Web サービスからデータをフェッチし、calljsonObject という名前のオブジェクトに保存します。これが生データです。次に、foreach ループを実行して生データから選択したデータを選択し、tmpList という名前のオブジェクトに保存し、最後の行で tmpList を docList という名前のビュー モデル プロパティにバインドします。

           SingleBoardListRawData calljsonObject = JsonConvert.DeserializeObject<SingleBoardListRawData>(callbackjsonstring);

           ObservableCollection<SinglePostViewModel> tmpList = new ObservableCollection<SinglePostViewModel>();
           SinglePostViewModel tmpPost = new SinglePostViewModel();
           foreach (List<object> item in calljsonObject.data)
           {
               tmpPost.doc_id = (long)item[0];
               tmpPost.doc_title = (string)item[1];
               tmpPost.doc_author = (string)item[2];
               tmpPost.repliesCount = (long)item[4];
               tmpPost.doc_post_date = DateTime.Parse((string)item[5]);
               tmpPost.OnTop = (long)item[6];
               tmpPost.CoolPost = (long)item[7];
               tmpPost.doc_update_date = DateTime.Parse((string)item[9]);
               tmpPost.PicInDoc = (long)item[10];
               tmpPost.reply_user_name = (string)item[11];
               tmpPost.doc_brief = (string)item[13];
               tmpList.Add(tmpPost);
           }
           this.docList = tmpList;

しかし、結果は同じデータでいっぱいの tmpList であり、これは最後の foreach 操作の結果です。しかし、私は tmpPost 値を再割り当てしたと思っていました。すべての Add メソッドが前のものを実行するようです。

foreach ループを実行するたびに新しいオブジェクトを作成したくありません。コストがかかると思います。

私の質問は: 1. なぜですか? 2.どうやって解決するの?

4

2 に答える 2

8

各反復で同じオブジェクトへの参照を追加し、各反復でそのオブジェクト内のデータを上書きしています。反復ごとに新しいオブジェクトを作成する必要があります。次の行を移動します。

SinglePostViewModel tmpPost = new SinglePostViewModel();

ループに。

foreach (List<object> item in calljsonObject.data)
{
    SinglePostViewModel tmpPost = new SinglePostViewModel();
    tmpPost.doc_id = (long)item[0];
    ...
}

foreach ループを実行するたびに新しいオブジェクトを作成したくありません。コストがかかると思います。

それほど多くのオブジェクトを作成しない場合、さまざまな値をどのように維持すると思いますか? データはどこにあると思いますか? また、パフォーマンスに関する懸念について、どのような証拠がありますか?

参照型と値型がどのように機能するかを理解することは非常に重要です。このトピックに関する私の記事を読んで、それがあなたの状況にどのように当てはまるか考えてみてください.

于 2013-05-17T08:30:50.417 に答える