If you use this method quit often by passing an `Integer` you will get performance problems because of the boxing and unboxing of the struct. My advice would be to either write two methods one using an `Integer` and the other using a `String` as argument, or write a generic method. ___ Based on the [naming guidelines][1] you should name methods by using a verb or a verb phrase. `DTableCellValue` looks by its name more as a property than a method. Based on the same guidelines method arguments should be named using `camelCase` casing. Although VB.NET isnt case sensitive I would like to suggest to follow these guidelines. ___ The `try..catch` is in its current form senseless because if an exception is thrown you are just rethrowing it. ___ A construct like If condition Then Return Value Else Return otherValue End If can be simplified by removing the redundant `else` like so If condition Then Return Value End If Return otherValue because if the condition is `true` the `else` won't be reached. ___ Implementing the mentioned points (leaving aside the method name) leads to two methods like so Public Function DTableCellValue(ByRef rowData As DataRow, _ ByVal colIndex As Integer, _ Optional ByVal defaultVal As String = "") As Object Dim ret As Object = rowData.Item(colIndex) If IsDBNull(ret) Then Return defaultVal End If Return ret End Function Public Function DTableCellValue(ByRef rowData As DataRow, _ ByVal colIndex As String, _ Optional ByVal defaultVal As String = "") As Object Dim ret As Object = rowData.Item(colIndex) If IsDBNull(ret) Then Return defaultVal End If Return ret End Function [1]: http://msdn.microsoft.com/en-us/library/ms229002.aspx