如何改进此代码?这个长篇大论的原因是我不能在数据行上使用string.IsNullOrEmpty而是我必须使用dr.IsHOUSENUMBERNull方法和string.IsNullOrEmpty来检查它是否为空。为什么是这样?数据库中的列有时为空,有时为NULL。
我确信这可以写得更好:
If Not dr.IsHOUSENUMBERNull Then
If Not String.IsNullOrEmpty(dr.HOUSENUMBER) Then
sbAddress.AppendLine(dr.HOUSENUMBER + " " + dr.ADDRESS1)
Else
sbAddress.AppendLine(dr.ADDRESS1)
End If
Else
sbAddress.AppendLine(dr.ADDRESS1)
End If
答案 0 :(得分:3)
你可以这样做,有点短:
If dr.IsHOUSENUMBERNull OrElse String.IsNullOrEmpty(dr.HOUSENUMBER) Then
sbAddress.AppendLine(dr.ADDRESS1)
Else
sbAddress.AppendLine(dr.HOUSENUMBER + " " + dr.ADDRESS1)
End If
或者,如果你想要它更简洁,但在这种情况下我认为不太可读,请使用If()
:
sb.Address.AppendLine(If(r.IsHOUSENUMBERNull OrElse String.IsNullOrEmpty(dr.HOUSENUMBER), dr.ADDRESS1, dr.HOUSENUMBER + " " + dr.ADDRESS1))
答案 1 :(得分:0)
数据库的 NULL 和.NET的 null 之间存在差异(VB的 Nothing 应用于引用类型时)。
string.IsNullOrEmpty查找.NET的null - 而不是数据库的NULL。所以不需要检查null - 只有NULL / DBNull
如果将数据库的NULL或.NET的null存储到DataTable中,则会返回DBNull。
AppendLine(object)调用的object.ToString()
DBNull.Value.ToString()返回“”
鉴于所有这些信息,您的代码可以简化为:
sbAddress.Append(dr.HOUSENUMBER)
If Not dr.IsHOUSENUMBERNull AndAlso dr.HOUSENUMBER.Length <> 0 Then
sbAddress.Append(" ")
End If
sbAddress.AppendLine(dr.ADDRESS1)