从VB.NET转换为C#后比较null和null值

时间:2018-05-15 16:31:16

标签: c# vb.net

我试图将以下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

2 个答案:

答案 0 :(得分:0)

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

引用Tim

  

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#。 equivelant代码是:

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

答案 1 :(得分:-1)

C#中,您可以通过以下方式轻松检查:

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