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.
相关产品推荐
相关产品推荐

