如何在vb.net中实现值类型的C#’as’关键字?
发布时间:2020-12-17 00:10:25 所属栏目:大数据 来源:网络整理
导读:我们的大部分开发都是在vb.net(不是我的选择)中完成的,一个经常使用的代码模式使用“On Error GoTo”,后跟“继续下一步”,以便所有数据库字段都可以使用DirectCast()和DBNull值被忽略. 当前的代码将是 On Error GoTo error_codeoObject.Name = DirectCast(oR
我们的大部分开发都是在vb.net(不是我的选择)中完成的,一个经常使用的代码模式使用“On Error GoTo”,后跟“继续下一步”,以便所有数据库字段都可以使用DirectCast()和DBNull值被忽略.
当前的代码将是 On Error GoTo error_code oObject.Name = DirectCast(oReader.Item("Name"),String) oObject.Value = DirectCast(oReader.Item("Value"),Integer) error_code: Resume Next C#代码替换这个使得能够删除On Error代码就可以了 oObject.Name = oReader["Name"] as string ?? string.Empty; oObject.Value = oReader["Value"] as int? ?? -1; 问题是这个C#代码的vb.net eqivelent使用TryCast(),它只能用于引用类型(可空类型是值类型),而C#as关键字可以用于引用和可空类型. 所以总结有没有人有一个vb.net代码的例子,与每个数据库字段的单行中的C#代码相同? -编辑- 我决定了我认为是我们案例中最好的解决方案. Helper方法不适合(由于管理),我们不能使用扩展方法,因为我们只使用.NET 2.0(尽管使用VS 2008,所以我们得到了If()) oObject.Name = If(oReader.IsDBNull(oReader.GetOrdinal("Name")),String.Empty,oReader.GetString(oReader.GetOrdinal("Name"))) oObject.Value = If(oReader.IsDBNull(oReader.GetOrdinal("Value")),oReader.GetInt32(oReader.GetOrdinal("Value")))
在VB 9.0中,“IF”是一个真正的合并操作,相当于C#的“??”.
来源 MSDN: 所以你可以使用: oObject.Name = IF(oReader.Item("Name").Equals(DBNull.Value),string.Empty,DirectCast(oReader.Item("Name"),String)) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |