c# - 如何使用C#每n个项目迭代一个循环
问题描述
我有一个 ObservableCollection 和一个值列表,我想循环,以便我一次依次插入 10 个值 ObservableCollection 并处理它们。我试过了
Dictionary<string, ObservableCollection<object>> dataDic = new Dictionary<string, ObservableCollection<object>>();
ObservableCollection<ListViewThumbnailViewModel> result;
foreach (KeyValuePair<string, ObservableCollection<object>> pair in dataDic)
{
DateTime _date = DateTime.ParseExact(pair.Key, PRIVATE_DATE_FORMAT, CultureInfo.InvariantCulture);
for (int i = 0; i <= dataDic.FirstOrDefault.Value.Count - 1; i += 10)
{
result.Insert(i, new ListViewThumbnailViewModel()
{
DateItem = _date,
ListThumbnail = pair.Value
});
result.Skip(i).Take(10).ToList();
Thread.Sleep(100);
}
}
//Show result in screen
_viewModel.ResultSearch.ListResult = new ObservableCollection<ListViewThumbnailViewModel>(result);
但它抛出异常:索引必须在列表的范围内。参数名称索引
解决方案
问题是您正在使用您的i
索引,但您只检查一种情况,并且您不检查它,因为它可能会中断,而只是因为您想遍历它。
这是一个解决方案,修正了一些缺陷。
Dictionary<string, ObservableCollection<object>> dataDic = new Dictionary<string, ObservableCollection<object>>();
ObservableCollection<ListViewThumbnailViewModel> result = new ObservableCollection<ListViewThumbnailViewModel>();
foreach (KeyValuePair<string, ObservableCollection<object>> pair in dataDic)
{
DateTime _date = DateTime.ParseExact(pair.Key, PRIVATE_DATE_FORMAT, CultureInfo.InvariantCulture);
for (int i = 0; i <= dataDic.FirstOrDefault().Value.Count - 1 && i <= result.Count ; i += 10)
{
result.Insert(i, new ListViewThumbnailViewModel()
{
DateItem = _date,
ListThumbnail = pair.Value
});
result.Skip(i).Take(10).ToList(); // use the return value here
Thread.Sleep(100);
}
}
还要小心firstOrDefault
第一个或默认值不会返回任何内容,这也是可能失败的一点。
推荐阅读
- pdf - 从多个 md 文件创建一个笔记本
- c# - VS 2019 无法在文件夹中创建类
- python - 为什么 if not in(x,y) 在 python 中根本不起作用
- regex - 正则表达式以任何顺序匹配包含恰好两个相等单词的字符串
- python - 如何从 Python Numpy array1 中提取特定值并从这些值中创建一个与 array1 具有相同形状的新 array2
- java - 我的 java 计算器项目有错误。我不知道如何解决它们
- firebase - Firebase 和 One Signal 推送通知指南
- android - 什么机制导致在 Fragment 到 Fragment 导航中调用 View.onSaveInstanceState?
- asp.net-core - DotNetCore 3.1 中配置的双下划线似乎不像我预期的那样工作
- objective-c - 为什么我的约束在我的 xib 文件中不起作用