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

能否用单个方法实现接收可空类型并返回非可空类型?

单个方法实现接收可空类型并返回非空类型

当然可以用单个方法实现,在C# 8.0及以上版本,结合可空引用类型特性就能搞定,不需要写两个重载。

直接上代码:

public static T Do<T>(T? t)
{
    return t ?? throw new ArgumentNullException(nameof(t));
}

或者更简洁的表达式体写法:

public static T Do<T>(T? t) => t ?? throw new ArgumentNullException(nameof(t));

为什么这个方法能同时处理值类型和引用类型的可空?

  • 当T是值类型时,T?本质是Nullable<T>,??运算符会自动判断:如果t为null(也就是Nullable<T>.HasValue为false)就抛出异常,否则返回t.Value。
  • 当T是引用类型时,T?是可空引用类型的标记,??运算符会检查引用是否为null,为空则抛异常,否则直接返回引用本身。

注意事项

需要在项目中启用可空引用类型:

  1. 打开项目的.csproj文件
  2. 添加或修改<Nullable>enable</Nullable>配置项,放在<PropertyGroup>节点下

这样编译器还能帮你做静态检查,避免传入不符合要求的参数。

内容的提问来源于stack exchange,提问作者Chris DaMour

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 10:43:10