我们的大多数开发都是在vb.net中完成的(不是我的选择),一个经常使用的代码模式使用'On Error GoTo'后跟'Resume Next',以便所有数据库字段都可以使用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
Run Code Online (Sandbox Code Playgroud)
C#代码替换这个启用删除On Error代码即可
oObject.Name = oReader["Name"] as string ?? string.Empty;
oObject.Value = oReader["Value"] as int? ?? -1;
Run Code Online (Sandbox Code Playgroud)
问题是这个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")), 0, oReader.GetInt32(oReader.GetOrdinal("Value")))
Run Code Online (Sandbox Code Playgroud)