指数超出范围。必须是非负数且小于集合的大小

时间:2013-06-03 10:54:56

标签: c# list class model-view-controller indexing

我是通用收藏品的新手

我有一个班级。班级名称为ReportSubCategoryModel

这些是类属性

public class ReportSubCategoryModel
    {

        public string ReporTitle { get; set; }
        public string ReporStatus { get; set; }
        public string ReportDescription { get; set; }
        public int ReporSubCategoryId { get; set; }
        public IList<ReportSubCategoryModel> ReportSubCategoryModelList { get; set; }
    }

我想从数据库中设置此类属性中的大量值。所以我分配了该类的列表

 IList<ReportSubCategoryModel> reportSubCategoryModel = new List<ReportSubCategoryModel>();

现在我想在for循环中设置一个值

IList<ReportSubCategory> reportSubCategory = datamodel.ReportSubCategory.Where(r => r.ReportCategoryId == reportCategoryId).ToList();
            for (int i = 0; i < reportSubCategory.Count; i++)
            {
                int reportSubCategoryId = reportSubCategory[i].ReportSubCategoryId;
                ReportStatu reportStatus =
                    datamodel.ReportStatus.SingleOrDefault(
                        r => r.ReportSubCategoryId == reportSubCategoryId);
                if (reportStatus == null)
                {
                    reportSubCategoryModel[i].ReportDescription = "Dis";**//This line threw the error**
                    reportSubCategoryModel[i].ReporStatus = "Not Available";
                    reportSubCategoryModel[i].ReporTitle = reportSubCategory[i].ReportSubCategoryName;
                    reportSubCategoryModel[i].ReportSubCategoryModelList.Add(reportSubCategoryModel[i]);
                }
                else
                {
                    reportSubCategoryModel[i].ReportDescription = "Dis";
                    reportSubCategoryModel[i].ReporStatus = "Available For " + reportStatus.ReportStatusDescription;
                    reportSubCategoryModel[i].ReporTitle = reportSubCategory[i].ReportSubCategoryName;
                    reportSubCategoryModel[i].ReporSubCategoryId = reportSubCategoryId;
                    reportSubCategoryModel[i].ReportSubCategoryModelList.Add(reportSubCategoryModel[i]);
                }

            }
            return reportSubCategoryModel.ToList();

但它不起作用。

这一行reportSubCategoryModel[i].ReportDescription = "Dis";给出了索引超出范围的错误。必须是非负数且小于集合的大小。

你可以从下面的图片中看到这个问题和我的代码。请放大你的浏览器(cntrl + Up Mouse Scrolling) enter image description here

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:0)

在主循环中创建一个嵌套循环。使用reportSubCategoryModel.Count。

答案 1 :(得分:0)

您将列表视为数组。

类似于以下内容可以替换分配部分

var temp = new ReportSubCategoryModel();
temp.ReportDescription  = "dis"; 
....
reportSubCategoryModel.Add(temp);

应对问题进行排序。

答案 2 :(得分:0)

我不完全确定整个逻辑是什么意思,但这就是我觉得代码应该是这样的:

IList<ReportSubCategory> reportSubCategory = datamodel.ReportSubCategory
    .Where(r => r.ReportCategoryId == reportCategoryId)
    .ToList();

foreach (var subCategory in reportSubCategory)
{
    int reportSubCategoryId = subCategory.ReportSubCategoryId;

    ReportStatus reportStatus = datamodel.ReportStatus
        .SingleOrDefault(r => r.ReportSubCategoryId == reportSubCategoryId);

    if (reportStatus == null)
    {
        var model = new ReportSubCategoryModel();

        model.ReportDescription = "Dis";
        model.ReporStatus = "Not Available";
        model.ReporTitle = subCategory.ReportSubCategoryName;

        // Not sure what this is.
        //model.ReportSubCategoryModelList.Add(reportSubCategoryModel[i]);

        reportSubCategoryModel.Add(model);
    }
    else
    {
        var model = new ReportSubCategoryModel();

        model.ReportDescription = "Dis";
        model.ReporStatus = "Available For " + reportStatus.ReportStatusDescription;
        model.ReporTitle = subCategory.ReportSubCategoryName;
        model.ReporSubCategoryId = reportSubCategoryId;

        // Not sure what this is either.
        //reportSubCategoryModel[i].ReportSubCategoryModelList.Add(reportSubCategoryModel[i]);

        reportSubCategoryModel.Add(model);
    }
}

return reportSubCategoryModel;

基本上,您new建立模型,设置属性,然后将Add设置为模型列表;基于迭代子类别列表。

但是,我不确定整个嵌套列表的内容是什么(我注释掉的代码)。

此外,这段代码可以进一步修改,但我现在暂时不做,以免与提供的代码分开太多。

答案 3 :(得分:0)

据我所知,您只创建了reportSubCategoryModel列表,但尚未填充它。

列表不预先填充空值,因此在初始化后长度为零。如果要添加新值,则需要创建ReportSubCategoryModel对象,然后将其添加到List中。

而不是尝试编辑列表的值;

 reportSubCategoryModel[i].ReportDescription = "Dis";

首先创建ReportSubCategoryModel对象,填充数据并使用List.Add方法将其添加到List中。

ReportSubCategoryModel reportSubCategoryModelObject = new ReportSubCategoryModel();
reportSubCategoryModelObject.ReportDescription = "Dis";**//This line threw the error**
reportSubCategoryModelObject.ReporStatus = "Not Available";
reportSubCategoryModelObject.ReporTitle = reportSubCategory[i].ReportSubCategoryName;
reportSubCategoryModel.Add(reportSubCategoryModelObject);