public static string SafetoString(this Object o) { if (o == null || o is System.dbnull) return ""; else { if (o is string) return (string)o; else return ""; }}public static int SafetoInt(this Object o) { if (o == null || o is System.dbnull) return 0; else { if (o.IsNumeric()) return Convert.ToInt32(o); else return 0; }}//same for double.. etc
我写了这些方法,因为我必须处理很多数据库数据(从oleDbDataReader),可以是null(不应该,但是),因为底层数据库是非常宽松的列可能是null.为了让我的生活更容易一些,我想出了这些扩展方法.
我想知道的是,这是否是好的风格,可接受的风格或坏的风格.我有点担心,因为它有点“污染”对象类.
谢谢你提前&最好的祝福 :)
基督教
附:我没有故意把它标记为“主观”.
解决方法 不,这不是很好的做法.你想在最低的可能点应用扩展方法.我相信有一个时间和一个地方(几乎)一切,但扩展方法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 IfEnd Function
那是VB,但你得到的照片.这个吸盘救了我一吨的时间,真正让读取数据行的干净的代码.你在正确的轨道上,但你的咒语是正确的:你的扩展方法太高了.
将扩展方法放在单独的命名空间中比没有更好(这是命名空间的完美有效的使用; linq使用它),但是不应该.要使这些方法适用于各种数据库对象,请将扩展方法应用于IDataRecord.
总结以上是内存溢出为你收集整理的c# – 创建适用于System.Object的扩展方法的良好做法?全部内容,希望文章能够帮你解决c# – 创建适用于System.Object的扩展方法的良好做法?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)