4

我有以下 ASP.NET (VB) 代码:

    strLocation = CStr(q1("LocationName")) + " " + CStr(q1("LocationAddress")) + " " + CStr(q1("LocationCity"))

由于 LocationCity 为空:

我从“DBNull”类型到“String”类型的转换无效。

有没有办法来解决这个问题。

如果它只是 LocationCity 我可能会做类似的事情:

    If IsDBNull(q1("LocationCity")) Then
        strLocation = ""
    Else
        strLocation = CStr(q1("LocationCity"))
    End If

我也试过:

    strLocation = If(CStr(q1("LocationName")), "") + " " + If(CStr(q1("LocationAddress")), "") + " " + If(CStr(q1("LocationCity")), "")

但得到了相同的结果

在 C# 中,我通常会使用 ?? 但不确定 ASP.NET VB 中的最佳方法

4

2 回答 2

10

??与 VB.NET 中的 C# 等效的是IF 运算符

strLocation = If(IsDBNull(q1("LocationCity")), "", CStr(q1("LocationCity")))

不要使用IIF 函数,因为它已被弃用,不支持短路并且不是类型安全的。

另请参阅C# 是否有 VB.NET 等价物?操作员?相关信息

于 2012-08-06T15:24:08.280 回答
2

你可以使用If(IsDBNull(q1("propertyName")), "", CStr(q1("propertyName")))

或者您可以将您显示的代码块实现为方法并为每个属性调用该方法。IMO,它会使您的代码行比使用 3 条 IIF 语句更简洁

Function StringValue(q1 as Q1Type) as String
    If IsDBNull(q1("LocationCity")) Then   
        Return ""   
    Else   
        Return  CStr(q1("LocationCity"))   
    End If
End Function

strLocation = StringValue(q1("LocationName")) + " " + StringValue(q1("LocationAddress")) + " " + StringValue(q1("LocationCity"))
于 2012-08-06T15:20:53.070 回答