2012-06-04 64 views
1

什麼是處理這種情況的最好辦法特例:通用功能與絃樂

我有這樣的泛型函數在字段值爲空,T爲字符串的特殊情況

Function FieldValue(Of T)(row As DataRow,fieldName As String) As T 
    Return If(row.IsNull(fieldName),Nothing,CType(row(fieldName),T)) 
End Function 

,我想返回String.Empty而不是Nothing。

回答

2

我認爲最簡單的方法是爲T =串中的某個函數:

Function FieldValue(row As DataRow ,fieldName As String) As String 
    Return If(row.IsNull(fieldName), String.Empty, CType(row(fieldName), String)) 
End Function 

(在現有的通用功能的頂部)


這裏的另一種選擇:

Function FieldValue(Of T)(row As DataRow,fieldName As String) As T 
    If GetType(T) = GetType(String) And row.IsNull(fieldName) Then 
     Return CType(CType(String.Empty, Object), T) 
    Else 
     Return If(row.IsNull(fieldName), Nothing, CType(row(fieldName), T)) 
    End If 
End Function 
+0

我希望能夠繼續像我一樣調用函數,即'Dim fv As String = FieldValue(of St ring)(row,fieldName)' – ic3b3rg

+0

我曾嘗試返回'New T'而不是'Nothing',但導致'New'不能用於沒有'New'約束的類型參數。' – ic3b3rg

+0

我在另一個通用函數中添加了另一種方法。您需要一個類型約束才能使用New,但是您會將該函數的使用限制爲具有匿名構造函數的類型。 –