CS8618非空变量错误求助:构造函数退出时非空变量未赋值问题
CS8618非空变量错误求助:构造函数退出时非空变量未赋值问题
嗨,我之前也踩过这个CS8618错误的坑,太懂这种看着编译器报红的烦躁了!先给你理清楚这个错误到底是啥意思:这是C#的空值安全检查在提醒你——你声明了一个非空类型的变量,但当构造函数执行完、准备退出的时候,这个变量还没被赋上非空的值,编译器担心后续代码用到它的时候会触发空引用异常。
给你几个实用的解决办法,你可以根据自己的场景选:
- 在构造函数里直接赋值:这是最稳妥的方式。比如你在类里声明了一个
Button myBtn;,那就在构造函数里加上myBtn = new Button();,确保构造函数结束时变量已经有了有效的实例。 - 把变量改成可空类型:如果这个变量确实有可能在某些场景下为空,那就在类型后面加个
?,比如Button? myBtn;。这样编译器就知道这个变量允许为空,不会再抛出这个错误了。 - 用非空断言
!标记:如果你百分百确定这个变量会在构造函数之后的某个时机被赋值(比如依赖注入、页面加载时初始化),可以在声明变量的时候加!,比如Button myBtn!;。不过这个要谨慎用哦,要是实际没赋值,运行时会直接炸掉。 - 声明时直接给默认值:比如字符串类型可以写成
string myStr = string.Empty;,对象类型如果有默认构造函数的话,直接MyClass myObj = new MyClass();,这样构造函数退出时变量自然就有值了。
举个贴合你WPF代码的例子:假设你在窗口类里声明了一个TextBlock statusText;,那要么在构造函数的InitializeComponent();之后加上statusText = new TextBlock();,要么改成TextBlock? statusText;,就能解决这个错误啦。
内容来源于stack exchange
相关产品推荐
相关产品推荐

