C#中代码“string?”里的问号“?”有什么作用?
C#中
string?里问号的作用 这个问号是C# 8.0及以后版本引入的**可空引用类型(Nullable Reference Types)**标记,核心作用就是明确告诉编译器:这个引用类型变量允许被赋值为null。
具体来说:
- 在默认启用可空引用类型的项目里,普通的
string会被编译器视为「非空引用类型」——如果你给它赋值null,或者在没判空的情况下直接调用它的成员(比如Length),编译器会抛出警告,帮你提前规避空引用异常。 - 加了
?的string?则是「可空引用类型」,编译器允许你给它赋值null,同时会提醒你在使用它的成员前先做null判断,避免运行时崩溃。
举个实际代码例子:
// 普通string赋值null,编译器会警告 string nonNullableStr = null; // 警告:不可将null字面量分配给非可空引用类型 // string?可以正常赋值null,无警告 string? nullableStr = null; // 使用string?时,编译器会要求先判空 if (nullableStr != null) { Console.WriteLine(nullableStr.Length); // 安全,不会触发空引用异常 } // 如果直接调用nullableStr.Length,编译器会警告可能的空引用
简单说,这个问号就是给编译器和其他开发者一个明确提示:这个字符串变量可能是null,处理的时候要留点心。
内容的提问来源于stack exchange,提问作者Nizam Bhagaskara
相关产品推荐
相关产品推荐

