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))有两个核心问题:
DBNull.Value是DBNull类型的实例,null是引用空,两者类型不兼容,不能用||直接运算||是逻辑或运算符,它的两边必须是布尔表达式(比如m1 == null这种返回true/false的判断),而不是两个具体的值
所以正确的做法是分别判断m1是否等于null,以及是否等于DBNull.Value,然后用||把这两个布尔结果连接起来。
内容的提问来源于stack exchange,提问作者Falcone
相关产品推荐
相关产品推荐

