首页 > 解决方案 > 如何使用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);

但它抛出异常:索引必须在列表的范围内。参数名称索引

标签: c#

解决方案


问题是您正在使用您的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第一个或默认值不会返回任何内容,这也是可能失败的一点。


推荐阅读