C# 编译器警告(level 4) CS0649 字段未赋值始终为null修复方法
问题现象
开发消息框制作应用、编写消息框保存功能时遇到编译器警告,警告截图如下:
Field 'Form1.table' is never assigned to, and will always have its default value null.
点击该警告会定位到public Form1()代码段。
问题原因
这个警告逻辑非常直接:你声明的private readonly DataTable table;字段从来没有被正确赋值,运行时会一直保持默认值null,后续调用table.Columns.Add、table.Rows.Add时会直接抛出空引用异常。
核心错误出在Form1_Load里的这行代码:
_ = table; new DataTable();
这是完全无效的写法:前半段把本来就是null的table赋值给弃元_,没有任何实际作用;后半段单独创建了一个没有任何变量引用的DataTable实例,生成后就会被垃圾回收,和你声明的table字段没有任何关联。
修复方案
两种改法都可以,按需选择即可:
- 保留
readonly修饰符的写法(推荐)
既然你给table加了readonly修饰符,本身就应该在构造函数内完成字段初始化,直接修改Form1构造函数即可:
改完后把public Form1() { InitializeComponent(); table = new DataTable(); // 新增这行初始化代码 }Form1_Load里那行错误的_ = table; new DataTable();直接删掉,其余代码保持不变,编译警告会直接消失,功能也能正常运行。 - 在Form_Load事件内初始化的写法
如果你需要在窗体加载阶段再初始化table,就把Form1_Load里的错误代码替换为正确的赋值语句:
注意:选这个写法要把字段声明处的private void Form1_Load(object sender, EventArgs e) { table = new DataTable(); // 用这行替换原来的错误代码 table.Columns.Add("title", typeof(String)); table.Columns.Add("message", typeof(String)); dataGridView1.DataSource = table; }readonly修饰符删掉,因为readonly字段只能在构造函数内赋值,写在其他方法中会触发新的编译错误。
改完后编译警告会消除,点击保存按钮即可正常将输入的标题、消息内容添加到表格中。
内容的提问来源于stack exchange,提问作者user19312346
相关产品推荐
相关产品推荐

