代码之家  ›  专栏  ›  技术社区  ›  Skitzafreak

如果值为null,则将字符串设置为空

  •  0
  • Skitzafreak  · 技术社区  · 6 年前

    NULL 例如,不是每个电话号码都有分机。这就是我目前的代码:

    Structure CustomerContact
        Public _name As String
        Public _email As String
        Public _fax As String
        Public _phone1 As String
        Public _phone2 As String
        Public _phone3 As String
        Public _ext1 As String
        Public _ext2 As String
        Public _ext3 As String
        Public _type1 As String
        Public _type2 As String
        Public _type3 As String
    End Structure
    
        Dim contactData As DataTable = CustomerDBFunctions.GetCustomerContacts(Customer)
        For Each row As DataRow In contactData.Rows
            If contacts.Count < 1 Then
                contacts.Add(New CustomerContact With {
                                ._name = row.Item("FullName").ToString() & " (" & row.Item("ContactType").ToString() & ")",
                                ._email = row.Item("Email").ToString(),
                                ._fax = row.Item("Fax").ToString(),
                                ._phone1 = row.Item("Phone").ToString(),
                                ._ext1 = row.Item("Extension").ToString(),
                                ._type1 = row.Item("PhoneType").ToString()})
            End If
        Next
    

    现在,当数据库中的值为 因为它不能给字符串赋值。我想在出现空值的情况下,将变量的值设置为 "" 相反。我只是不知道该怎么编码。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Steven Doggart    6 年前

    从技术上讲,问题不在于列为null。 String 是引用类型,因此它只能为null(不过,如果为null,则不能调用 ToString DBNull.Value 对于行包含空值的所有列。

    你可以这样检查:

    If row.Item("Phone") <> DBNull.Value Then
        customerContact._phone1 = row.Item("Phone")?.ToString()
    End If
    

    注意,我曾经 ?. . 打电话的时候 托斯特林 以防列实际为null而不是 DbNull.Value DataTable . 如果是ADO.NET填充它,它永远不会为null,但是如果是自定义代码通过其他方式填充它,它可能会得到实际的null。

    因为你用的是 数据表 为了返回值,它有一个方便的 IsNull 方法,它会稍微清理代码:

    If Not row.IsNull("Phone") Then
        customerContact._phone1 = row.Item("Phone")?.ToString()
    End If
    

    ._phone1 = If(row.IsNull("Phone"), row.Item("Phone")?.ToString(), Nothing)
    
        2
  •  0
  •   Slai Pslice    6 年前

    字符串串联可用于转换 Nothing "" (在我的回答中还有其他选择。) here )

    ._fax = row!Fax & "",