You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 3.1下iText7代码编译通过运行抛NullReferenceException求助

问题分析与修复方案

你遇到的NullReferenceException主要由索引越界和变量作用域冲突导致,以下是具体问题和修复代码:

核心问题

  1. 固定数量的Table与查询行数不匹配:你初始化了仅包含10个Table的列表,但如果数据库查询结果的行数超过10行,当i递增到10时,tables[i]会访问列表范围外的元素,间接触发空引用异常。
  2. 变量作用域冲突:初始化tables的for循环未声明int i,若编译通过,会复用后续声明的i变量,导致tables的初始化逻辑异常,出现null元素。
  3. 隐性语法错误:代码中大写的For、未定义的newline均属于语法问题,虽未直接引发当前异常,但会导致其他运行错误。

修复后的代码

class Program
{        
    static PdfDocument pdfTable;
    static Document document;
    static string destination;
              
    static void Main()
    {            
        destination = Path.Combine(@"C:\Users\Administrator\Documents", "SRC_Selection.pdf");
        pdfTable = new PdfDocument(new PdfWriter(destination));
        document = new Document(pdfTable); 
        
        // 假设此处已正确初始化MySqlCommand cmd
        using (MySqlDataReader reader = cmd.ExecuteReader())
        {
            List<Table> tables = new List<Table>();
            int i = 0;
            
            // 按需创建Table,适配任意查询行数
            while (reader.Read())
            { 
                Table table = new Table(1);
                tables.Add(table);
                
                for (int j = 0; j < reader.FieldCount; j++)        
                {
                    // 处理数据库字段为null的情况
                    string cellContent = reader.IsDBNull(j) ? string.Empty : reader.GetString(j);
                    Cell cell = new Cell()   
                      .SetFontSize(10)
                      .SetTextAlignment(TextAlignment.LEFT)
                      .Add(new Paragraph(cellContent));
            
                    table.AddCell(cell);
                }

                document.Add(table);
                // 添加换行分隔
                document.Add(new Paragraph("\n"));
                i++;
            }
        }

        // 必须关闭文档,确保PDF正确生成
        document.Close();
        pdfTable.Close();
    }
}

关键修复点

  • 动态创建Table:去掉固定10个Table的初始化逻辑,改为在每次读取数据库行时创建新的Table,彻底避免索引越界问题。
  • 处理null字段:增加reader.IsDBNull(j)判断,防止Paragraph构造函数传入null值。
  • 修正语法错误:将大写For改为小写for,替换未定义的newline为new Paragraph("\n")。
  • 关闭文档资源:添加document.Close()和pdfTable.Close(),确保PDF文件正确保存,避免损坏。

内容的提问来源于stack exchange,提问作者Mat52

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 12:26:32