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

C#新版本中string与string?的区别及使用场景解惑

C#中string与string?的核心差异

1. 编译时语义与检查逻辑

  • string:当项目启用**可为空引用类型(Nullable Reference Types)**时,编译器将其视为非空引用类型。默认不允许直接赋值null,若未初始化就使用或赋值null,会触发编译警告,强制开发者保证变量非空。
  • string?:明确标记为可为空引用类型,编译器允许其被赋值为null,同时会在你使用该变量时,提示必须做空值检查(比如name?.Length或if (name != null)),避免潜在的NullReferenceException。

2. 运行时行为

两者在运行时完全没有区别——string本身就是引用类型,运行时原本就可以为null。可为空引用类型只是编译阶段的静态分析机制,不会改变类型的运行时本质。


示例代码的具体判断

方法参数string? name

是否加?取决于业务逻辑:

  • 如果允许调用方传入null(比如该参数是可选的,无值时传null),必须用string?,既明确告知编译器和其他开发者参数可空,也能借助编译器强制你在方法内部做空值校验。
  • 如果业务要求参数必须是非空字符串,就用string,此时调用方传入null会触发编译警告,你在方法内可安全使用该参数,无需额外空检。

字典值类型string?

同样看业务场景:

  • 如果字典中部分键对应的值允许为null(比如用null表示“无对应值”),就用string?,明确声明值的可空性,编译器会提醒你取值时做空值判断。
  • 如果字典的所有值都必须是非空字符串,就用string,避免意外存入null值。

内容的提问来源于stack exchange,提问作者Pradeep Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:05:32