You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请教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,提问作者דודו שטראוס

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 21:45:30