请教C#中default与default!的区别及代码示例对比
C# 中
default 和 default! 的区别 基础概念
default 是C#的关键字,作用是返回对应类型的默认值:
- 值类型(如
int、bool、DateTime)的默认值是其“零值”,比如int返回0,bool返回false; - 引用类型(如
string、自定义类)的默认值是null。
default! 的作用
default! 里的!是空值抑制运算符,是C# 8.0引入的特性,它不会改变default返回的实际值,唯一的作用是:当项目开启了「可空引用类型(Nullable Reference Types)」检查时,抑制编译器抛出的空值警告。
结合你的示例分析
你的示例里string是引用类型,default返回的是null:
- 原代码
public string FirstName { get; set; } = default!;:
这里FirstName是非可空引用类型(没有加?标记),编译器会认为它不应该被赋值为null。加!就是明确告诉编译器:“我知道这里赋值的是null,但我会负责后续的空值处理,你不用警告我”。 - 修改后的代码
public string FirstName { get; set; } = default;:
如果项目开启了可空引用类型检查,编译器会直接抛出警告,提示你给非可空的string赋值了null;如果没开启这个特性,代码能正常编译,但后续直接使用FirstName时可能会触发NullReferenceException。
核心区别总结
default:单纯返回类型默认值,不影响编译器的空值检查逻辑;default!:返回的默认值和default完全相同,仅在开启可空引用类型检查时,用来抑制编译器的空值警告。
内容的提问来源于stack exchange,提问作者דודו שטראוס
相关产品推荐
相关产品推荐

