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

VB.NET转C#后,如何判断对象为null或DBNull.Value?

如何在C#中检查对象是否为null或DBNull.Value?

你遇到的这个错误很典型——C#里的逻辑运算符||要求两边都是布尔值,而你试图把DBNull.Value和null这两个不同类型的值直接用||连接,这就导致了CS0019错误。

先看一下你原来的VB代码逻辑:判断m1是DBNull.Value或者Nothing,然后赋值0,否则赋值1。在C#里,我们需要把这两个条件分开判断,因为null是引用类型的空值,DBNull.Value是数据库空值的实例,两者不能直接用逻辑或合并成一个值来比较。

正确的C#写法

首先是完整的转换代码,和你的VB逻辑完全对应:

cmd.Parameters.AddWithValue("@ID", res_ID);
object m1 = cmd.ExecuteScalar();
if (m1 == null || m1 == DBNull.Value)
{
    m1 = 0;
}
else
{
    m1 = 1;
}

如果你喜欢更简洁的写法,可以用三元运算符:

cmd.Parameters.AddWithValue("@ID", res_ID);
object m1 = cmd.ExecuteScalar();
m1 = (m1 == null || m1 == DBNull.Value) ? 0 : 1;

错误原因解析

你写的If (m1 == (DBNull.Value || null))有两个核心问题:

  1. DBNull.Value是DBNull类型的实例,null是引用空,两者类型不兼容,不能用||直接运算
  2. ||是逻辑或运算符,它的两边必须是布尔表达式(比如m1 == null这种返回true/false的判断),而不是两个具体的值

所以正确的做法是分别判断m1是否等于null,以及是否等于DBNull.Value,然后用||把这两个布尔结果连接起来。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:01:41