如何在vb.net中实现值类型的C#’as’关键字?

前端之家收集整理的这篇文章主要介绍了如何在vb.net中实现值类型的C#’as’关键字?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们的大部分开发都是在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))

猜你在找的VB相关文章