加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在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))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读