将引用类型设为可空的意义?潜在空错误与声明意图疑问
可空引用类型疑问解答
什么是潜在的空错误?
潜在的空错误指的是代码存在触发NullReferenceException的风险,但在运行前很难被察觉的情况。举几个典型场景:
- 声明了非空引用类型变量(比如
string username),但实际逻辑中不小心给它赋了null,后续调用username.Length时就会抛出空引用异常 - 调用标注为返回非空引用的方法,但方法内部逻辑疏漏返回了
null,直接使用这个返回值的成员时就会踩坑 - 把可能为
null的值直接赋值给非空引用变量,编译阶段以前不会报错,但运行时大概率出问题
可空引用类型的编译时分析就是帮你提前识别这些风险,通过警告提示你修复,不用等到程序跑起来才崩溃。
使用可空引用类型时声明的是什么意图?
本质是明确告诉编译器和其他开发者:这个变量、参数或返回值是否允许为null:
- 当你用
string(非可空引用类型)时,你的意图是:这个值从始至终都不会是null,任何给它赋null的操作都是不符合预期的错误 - 当你用
string?(可空引用类型)时,你的意图是:这个值允许为null,后续使用它之前必须先做非空检查
编译器会严格按照你声明的意图做检查,一旦代码违反了这个意图(比如给非空变量赋null,或者直接使用可空变量的成员),就会立刻抛出警告,帮你守住代码的预期逻辑。
补充:非可空和可空引用类型在运行时没有任何区别,编译器不会给非可空类型加额外的运行时空检查,所有的校验都在编译阶段完成。
内容的提问来源于stack exchange,提问作者Yusif
相关产品推荐
相关产品推荐

