收集制作/设计问题
本文关键字:问题 | 更新日期: 2023-09-27 18:06:50
我需要根据用户选择的报告类型将集合绑定到GridView。
每个报告略有不同,但使用相同的基本结果集,该结果集有许多列。在绑定之前,我想循环遍历结果集并复制到一个更简单的集合(3个字符串变量,称为'column1', 'column2', 'column3')。
代码:namespace etc.etc.etc
{
public class ReportEntity
{
public string column1 { get; set; }
public string column2 { get; set; }
public string column3 { get; set; }
}
}
List<ReportEntity> a = new List<ReportEntity>();
ReportEntity[] b = new ReportEntity[results.Length];
for (int i = 0; i < results.Length; i++)
{
//a[i].column1 = results[i].class.desc;
//a[i].column2 = results[i].student.firstname;
//a[i].column3 = results[i].timescanned.ToString();
//b[i].column1 = results[i].class.desc;
//b[i].column2 = results[i].student.firstname;
//b[i].column3 = results[i].timescanned.ToString();
}
取消我为a
设置值的注释,得到Index was out of range. Must be non-negative and less than the size of the collection.
。取消注释,我为b
设置值,得到Object reference not set to an instance of an object.
。
results
肯定有很多记录。我能做错什么吗?
-
在第一种情况下你得到
IndexOutRangeException
,因为你刚刚创建了一个list的实例,但这个list不包含任何元素。 -
在第二种情况下你得到
NullReferenceException
,因为你刚刚用nulls
的results.Length
填充了数组。
您应该做的是显式地创建ReportEntity
的实例并放入底层数据结构。
List<ReportEntity> a = new List<ReportEntity>();
ReportEntity[] b = new ReportEntity[results.Length];
for (int i = 0; i < results.Length; i++)
{
a.Add(new ReportEntity() {column1 = results[i].class.desc,
column2 = results[i].student.firstname,
column3 = results[i].student.firstname }
b[i] = new ReportEntity() {column1 = results[i].class.desc,
column2 = results[i].student.firstname,
column3 = results[i].student.firstname }
}
或者您可以使用Select
扩展方法LINQ,就像在另一个答案中提到的那样。
使用Add
方法为List添加值
或者使用select from LINQ:
var a = results.Select(r => new ReportEntity {
column1 = r.class.desc,
column2 = r.student.firstname,
column3 = r.timescanned.ToString()
}).ToList();