对明显非空对象的空引用
本文关键字:对象 引用 | 更新日期: 2023-09-27 17:49:54
首先是我的代码:
我已经注释了问题行
protected void Page_Load(object sender, EventArgs e)
{
StreamReader reader = new StreamReader(Request.PhysicalApplicationPath + "/directory.txt");
int i = 0;
int c = 0;
int d = 0;
List<string> alst = new List<string>();
List<string> nlst = new List<string>();
TableRow[] row = new TableRow[100];
TableCell[] cella = new TableCell[100];
TableCell[] cellb = new TableCell[100];
while (reader.Peek() > 0)
{
alst.Add(reader.ReadLine());
nlst.Add(reader.ReadLine());
d++;
}
foreach (string line in nlst)
{
if (i < d + 1)
{
cella[i].Text = nlst[i]; //this line
cellb[i].Text = alst[i]; //and this line always return a null return a null reference when ran
i++;
}
}
do
{
row[c].Cells.Add(cella[c]);
row[c].Cells.Add(cellb[c]);
c++;
} while (c != cella.Count());
foreach (TableRow item in row)
{
Table1.Rows.Add(item);
}
}
我检查过了,所有涉及的变量都不是空的。我试过清洗溶液。我也试过为I设置静态值(比如0),但仍然一无所获。
我已经盯着这个东西看了至少2个小时,换了循环、if和其他东西,但仍然不能弄清楚。
提前感谢,亚当
TableCell[] cella = new TableCell[100];
TableCell[] cellb = new TableCell[100];
创建Array,但不初始化Array的值。所以
cella[i].Text = nlst[i];
cellb[i].Text = alst[i];
失败,因为cella[i]
总是null
,而.Text
不存在(同样适用于cellb[i]
)。
你必须首先初始化你的数组或者在循环中生成一个新的TableCell对象
cella[i] = new TableCell { Text = nlst[i] };
cellb[i] = new TableCell { Text = alst[i] };
此外:
- 考虑使用LINQ来处理列表操作和 试着将变量重命名为更有意义的。
- 使用
using
语句处理流(和其他IDisposable
对象)。这可以确保流被正确处理——即使发生错误。
cellb[i] = new TableCell { Text = alst[i] };
看起来像一个错误对我来说- N
去细胞A
和A
去细胞B
?当您声明TableCell[] cella = new TableCell[100];
时,您正在创建一个包含100个TableCell
引用的数组,所有这些引用都是null
。如果你试图执行cella[i].Text = nlst[i];
, cella[i]
是null
,所以当你试图分配null.Text
时,你会得到一个异常。
听起来你需要一个循环来为cella
和cellb
的所有元素填充值。
您从未在该数组中实例化TableCell
对象;您只是在实例化数组本身。在使用每个条目的属性之前,需要为它们创建new TableCell()
对象。