2

我是通用集合的新手

我有一个班级。班级名称是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";给出了 Index 的错误超出范围。必须是非负数且小于集合的大小。

您可以从下图中看到这个问题和我的代码。请缩放您的浏览器(cntrl+向上鼠标滚动) 在此处输入图像描述

我怎么解决这个问题 ?

4

4 回答 4

0

您将列表视为数组。

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

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

应该对问题进行排序。

于 2013-06-03T11:04:37.593 回答
0

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

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

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

 reportSubCategoryModel[i].ReportDescription = "Dis";

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

ReportSubCategoryModel reportSubCategoryModelObject = new ReportSubCategoryModel();
reportSubCategoryModelObject.ReportDescription = "Dis";**//This line threw the error**
reportSubCategoryModelObject.ReporStatus = "Not Available";
reportSubCategoryModelObject.ReporTitle = reportSubCategory[i].ReportSubCategoryName;
reportSubCategoryModel.Add(reportSubCategoryModelObject);
于 2013-06-03T11:20:14.483 回答
0

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

于 2013-06-03T11:03:52.437 回答
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将其设置为模型列表;基于迭代子类别列表。

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

此外,可以进一步修剪此代码,但我暂时将其省略,以免与提供的代码有太多偏差。

于 2013-06-03T11:07:08.810 回答