我是通用收藏品的新手
我有一个班级。班级名称为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)
我该如何解决这个问题?
答案 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);