c# - 从 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# 是否m1
是null
或者DBNull.Value
?
解决方案
正如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)
推荐阅读
- c# - 从Web api获取json数组到c#
- javascript - 未捕获的错误:`style` 道具需要来自样式属性的映射
- php - PHP - 根据列 postgresql 中的值删除行
- java - 使用 JpaRepository 持久化未知类型实体的最佳方法?
- android - 从tensorflow加载android项目中的.so文件时出错
- python - 将时间序列转换为图像矩阵
- spring-boot - org.springframework.beans.factory.BeanCreationException:创建定义名称“mvcValidator”的bean时出错
- javascript - 如何在数组中找到虚假值?
- c# - WPF如何在ListView中绑定ItemsSource的Item
- asp.net - asp页面上的XSS