vb.net – If()语句的奇怪行为
今天我偶然发现了VB.net If()语句的奇怪行为.也许你可以解释为什么它像它一样工作,或者你可以确认它是一个bug.
所以,我有一个带有“TestTable”表的SQL数据库,其中一个int列“NullableColumn”可以包含NULL.我想宣读本专栏的内容. 所以我声明了一个Nullable(Of Integer)类型的变量,为“SELECT NullableColumn FROM TestTable”打开一个SqlClient.SqlDataReader,并使用以下代码获取该列的内容: Dim content as Nullable(Of Integer) ... Using reader as SqlClient.SqlDataReader = ... content = If(reader.IsDBNull(reader.GetOrdinal("NullableColumn")),Nothing,reader.GetInt32(reader.GetOrdinal("NullableColumn"))) End Using 但之后我的变量内容的值为0,而不是我所期望的Nothing. 调试时一切看起来都不错,所以 > reader.GetOrdinal(“NullableColumn”)提供此列的正确序号位置(为0) 那么,为什么我的变量的值为0? 解决方法
在VB中,Nothing与null不同. If运算符必须根据传递给它的参数确定其结果的类型.当然,没有任何类型,因此If运算符可以在代码中返回的唯一类型是Int32.如果IsDBNull方法返回true,则If运算符返回Nothing强制转换为Int32.在VB中,Nothing返回类型的默认值.对于Int32,默认值为0.
从MSDN上的Nothing关键字: Nothing represents the default value of a data type. The default value depends on whether the variable is of a value type or of a reference type. For non-nullable value types,Nothing in Visual Basic differs from null in C#. In Visual Basic,if you set a variable of a non-nullable value type to Nothing,the variable is set to the default value for its declared type. In C#,if you assign a variable of a non-nullable value type to null,a compile-time error occurs. 我认为只是一个普通的If会效果最好: If Not reader.IsDBNull(reader.GetOrdinal("NullableColumn")) Then content = reader.GetInt32(reader.GetOrdinal("NullableColumn")) End If 或者保持更短 If Not reader.IsDBNull(reader.GetOrdinal("NullableColumn")) Then content = reader.GetInt32(reader.GetOrdinal("NullableColumn")) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |