首页 > 解决方案 > 从 VB.NET 转换为 C# 后比较空值和可空值

问题描述

我正在尝试将以下 VB.Net 代码翻译成 C#:

cmd.Parameters.AddWithValue("@ID", res_ID)
Dim m1 As Object = cmd.ExecuteScalar()
If m1 Is DBNull.Value Or Nothing Then
   m1 = 0
Else
   m1 = 1
End If

特别是,我坚持以下行:

If m1 Is DBNull.Value Or Nothing Then

我试图这样翻译它:

If (m1 == (DBNull.Value || null))

但是,这给了我以下错误:

CS0019 运算符“||” 不能应用于“DBNull”和“<null>”类型的操作数

如何正确检查 C# 是否m1null或者DBNull.Value

标签: c#vb.net

解决方案


正如Tim Schmelter在评论中指出的那样,您的原始代码有些不正确。它没有做你认为它正在做的事情。

引用蒂姆的话:

VB.NET 代码不应该被翻译,因为它有问题。应该是:If m1 Is DBNull.Value OrElse m1 Is Nothing Then。在您的代码中,Nothing 将被编译为,False因为这是默认值Boolean

这意味着您的代码实际上被编译为:

If m1 Is DBNull.Value Or False Then

形式的表达式在x Or False逻辑上等价于x。因此,您的包含Or Nothing对表达式没有影响。接受蒂姆的建议:

If m1 Is DBNull.Value OrElse m1 Is Nothing Then

可能会使如何正确地将其转换为 C# 更清楚一些。等效代码是:

if (m1 == DBNull.Value || m1 == null)

推荐阅读