Нет , это не очень хорошая практика. Вы хотите применить методы расширения в самой низкой точке . Я считаю, что есть время и место для (почти) всего, но методы расширения System.Object почти никогда не будут подходящими. Вы должны иметь возможность применять методы расширения, такие как этот, гораздо дальше вниз по стеку наследования. В противном случае это загромождает ваш смысл и, возможно, в конечном итоге будет неправильно использоваться другими разработчиками.
Однако методы расширения объектов данных для работы со значениями Null - это очень хорошее использование методов расширения. Подумайте над тем, чтобы поставить их прямо на вас OleDbDataReader . У меня есть общий метод расширения, который называется ValueOrDefault, что. , , хорошо, я просто покажу вам это:
<Extension()> _
Public Function ValueOrDefault(Of T)(ByVal r As DataRow, ByVal fieldName As String) As T
If r.IsNull(fieldName) Then
If GetType(T) Is GetType(String) Then
Return CType(CType("", Object), T)
Else
Return Nothing
End If
Else
Return CType(r.Item(fieldName), T)
End If
End Function
Это VB, но вы понимаете. Эта присоска экономит мне кучу времени и действительно способствует чистому коду при чтении из базы данных. Вы на правильном пути , но ваше чувство заклинания правильное: у вас слишком высокие методы расширения.
Поместить методы расширения в отдельное пространство имен лучше, чем ничего (это вполне допустимое использование пространств имен; это использует Linq), но вам не нужно этого делать. Чтобы эти методы применялись к различным объектам БД, примените методы расширения к IDataRecord .