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

C#与VB可空值类型相等判断差异及VB优雅实现方式咨询

优雅处理VB.NET中可空值类型的相等比较问题

这确实是C#和VB.NET在可空类型处理上一个容易踩坑的差异——C#会把两个null的可空值直接判定为相等,而VB.NET的=运算符在两边都是Nothing时会返回Nothing(也就是Boolean?类型),直接放到If语句里自然会抛出异常,因为If需要的是确定的布尔值。

你现在的写法虽然能解决问题,但确实不够简洁,这里有两种更优雅的实现方式:

1. 使用泛型的Nullable.Equals方法

这是专门为可空类型设计的相等比较方法,类型安全且语义清晰:

If Nullable.Equals(a, b) Then
    ' 执行你的逻辑
End If

它的处理逻辑完全符合你的需求:

  • 如果a和b都是Nothing,返回True
  • 如果其中一个是Nothing另一个不是,返回False
  • 如果两者都有实际值,则比较值是否相等

2. 使用Object.Equals方法

这个方法是.NET基类提供的通用相等比较,同样能正确处理可空类型的Nothing情况:

If Object.Equals(a, b) Then
    ' 执行你的逻辑
End If

它的行为和Nullable.Equals一致,优点是写法更短,不过如果是严格的类型安全场景,Nullable.Equals会更合适(毕竟是泛型方法,避免了装箱操作)。

这两种写法都比你原来的复合条件简洁得多,而且完全覆盖了所有边界情况,推荐使用~

内容的提问来源于stack exchange,提问作者A.D.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:10:48