Alb*_*Gao 0 c# foreach loops list observablecollection
下面的代码做了一件简单的事情.操纵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;
Run Code Online (Sandbox Code Playgroud)
但结果是tmpList充满了相同的数据,这是最后一次foreach操作的结果.但我认为我已经重新分配了tmpPost值,似乎每个Add方法都会发生在前一个.
每次我做一个foreach循环时我不想新建一个对象,我认为它花了很多钱,
我的问题是:1.为什么?2.如何解决?
您在每次迭代时添加对同一对象的引用,并在每次迭代时覆盖该对象内的数据.您需要在每次迭代时创建一个新对象.移动这一行:
SinglePostViewModel tmpPost = new SinglePostViewModel();
Run Code Online (Sandbox Code Playgroud)
进入循环.
foreach (List<object> item in calljsonObject.data)
{
SinglePostViewModel tmpPost = new SinglePostViewModel();
tmpPost.doc_id = (long)item[0];
...
}
Run Code Online (Sandbox Code Playgroud)
每次我做一个foreach循环时我不想新建一个对象,我认为它花了很多钱,
如果不创建那么多对象,您期望如何维护不同的值?您希望数据在哪里生存?您对性能问题有什么证据?
了解引用类型和值类型的工作方式非常重要.请阅读我关于此主题的文章,并考虑在您的情况下如何适用.
| 归档时间: |
|
| 查看次数: |
107 次 |
| 最近记录: |