将项添加到列表字符串但获取空引用异常

时间:2013-08-27 01:45:15

标签: c# winforms

我正在向字符串列表中添加项目,我知道存在要插入的数据,但我不断收到空引用错误消息Object reference not set to an instance of an object.

    public class ExcelRow
        {
            public List<String> lstCells;
            public byte[] rowHash;
            ......
        }
    public class ExcelInfo
        {
            public List<ExcelRow> excelRows;
        }

    public ExcelInfo ReadExcel(OpenFileDialog openFileDialog)
        {
            var _excelFile = new ExcelQueryFactory(openFileDialog.FileName);
            var _info = from c in _excelFile.WorksheetNoHeader() select c;

            ExcelRow excelRow;
            ExcelInfo resp;

            resp = new ExcelInfo();

            foreach (var item in _info)
            {
                excelRow = new ExcelRow();
                excelRow.lstCells.Add(item.ElementAt(0));
                excelRow.lstCells.Add(item.ElementAt(1));
                excelRow.lstCells.Add(item.ElementAt(2));
                excelRow.lstCells.Add(item.ElementAt(3));
                .....
                excelRow.CalculateHash();
                resp.excelRows.Add(excelRow);
             }
            return resp;
       }

这是我收到错误的地方:excelRow.lstCells.Add(item.ElementAt(0));

2 个答案:

答案 0 :(得分:2)

您需要在lstCells构造函数中初始化ExcelRow

public class ExcelRow {
  public List<String> lstCells;
  public byte[] rowHash;
  public ExcelRow(){
     lstCells = new List<string>();
  }
  //....
}

public class ExcelInfo {
  public List<ExcelRow> excelRows = new List<ExcelRow>();
}

答案 1 :(得分:1)

您没有展示您的ExcelRow构造函数,但是从错误中我猜测您从未实例化lstCells并且它仍为空。

您可以通过调试程序并将鼠标悬停在行中的每个项目上,或者有条不紊地从行中删除一个项目直到它再次开始工作来找到这个。并推断出问题。