我想初始化一個類,數據來自MySql數據庫。某些字段可以爲空:VB.NET 2010和MySql - 爲懶惰的人處理數據庫空缺
Dim dr As MySqlDataReader = ...
Dim item As New Item(dr.GetInt16(0), dr.GetString(1), dr.GetString(2))
假設最後兩個字段可能爲NULL在數據庫中,以便調用GetString的在那場導致異常。
我當然可以編寫代碼來測試空值之前,我每場:
dim field1 as String
if (dr.IsDbNull(1))
field1 = Nothing ' or even ""
else
field1 = dr.GetString(1)
但如果你有很多的領域,這是一個「如果」的噩夢。
爲了這個目的,我改寫了國際金融研究所VB的功能,使其更加類型化,從而避免強制轉換:
Namespace Util
Public Shared Function IIf(Of T)(ByVal condition As Boolean, ByVal iftrue As T, ByVal iffalse As T) As T
If condition Then Return iftrue Else Return iffalse
End Function
,這樣我可以寫的東西,如:
Dim item As New Item(
dr.GetInt16(0),
Util.IIf(dr.IsDbNull(1), "", dr.GetString(1),
Util.IIf(dr.IsDbNull(2), "", dr.GetString(2))
的類型I如果在其他情況下可以很好地工作,但不幸的是,在這種情況下它不會工作,因爲是正常功能,而不是語言關鍵字,每個輸入參數在ca如果該字段爲NULL,則引發異常。
你能想到一個優雅的無解決方案嗎?
類型轉換就好了:當你調用像GetString這樣的強類型函數時,在內部添加'DbDataReader'實現。 – 2010-07-28 09:10:16