首先是我的代码:
我评论了问题行
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个小时,改变循环,ifs和其他东西,但仍然无法解决。
提前致谢, 亚当
答案 0 :(得分:4)
TableCell[] cella = new TableCell[100];
TableCell[] cellb = new TableCell[100];
这会创建一个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] };
此外:
cellb[i] = new TableCell { Text = alst[i] };
对我来说是个错误 - N
转到单元格A
而A
转到单元格B
? using
个对象)时使用IDisposable
语句。这样可以确保正确处理流 - 即使出现错误。using(var reader = new StreamReader(Request.PhysicalApplicationPath + "/directory.txt");) { // your code her ... }
答案 1 :(得分:1)
当您声明TableCell[] cella = new TableCell[100];
时,您正在创建一个包含TableCell
的100个引用的数组,所有这些引用都是null
。如果您尝试执行cella[i].Text = nlst[i];
,cella[i]
为null
,那么当您尝试分配null.Text
时会出现异常。
听起来你需要一个循环来填充cella
和cellb
的所有元素的值。
答案 2 :(得分:0)
您永远不会在该数组中实例化TableCell
个对象;你只是实例化数组本身。您需要为每个条目创建new TableCell()
个对象,然后才能使用它们的属性。