我试图将以下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#,m1
是null
还是DBNull.Value
?
答案 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 )