对象的动态赋值

最近在做项目中做了个动态给对象赋值的功能,这样就避免了每个对象的属性都要一一复制。

原理很简单,传一个DATAREADER,根据字段名称,取类的属性,若存在则将字段值赋值与它。

以下贴上代码,如有不妥,欢迎大家指正,或给出更好的建议。

      

’对象集合赋值

 
Public Shared Function getListFromDatareader(ByVal list As ObjectByVal Model As ObjectByVal rdr As SqlDataReader) As Object
        
While rdr.Read

            ‘System.Activator.CreateInstance(Model.GetType),
--实例化一个新对象
            list.Add(getModelFromDatareader(System.Activator.CreateInstance(Model.GetType), rdr))
        
End While
        
Return list
        rdr.Close()
    
End Function

    ‘单个对象赋值
    
Public Shared Function getModelFromDatareader(ByVal Model As ObjectByVal rdr As SqlDataReader) As Object

            
For i = 0 To rdr.FieldCount - 1
            
Dim mProperty = Model.GetType.GetProperty(rdr.GetName(i))‘取当前类的和本字段名的属性

             ’若属性存在,则将本字段的值赋值与它

            
If Not IsNothing(mProperty) Then
                
Select Case mProperty.PropertyType.Name.ToString
                    
Case "String"
                        mProperty.SetValue(Model, rdr.Item(mProperty.Name.ToString).ToString, 
Nothing)
                    
Case "Byte""Int32"
                        mProperty.SetValue(Model, 
CInt(rdr.Item(mProperty.Name.ToString).ToString), Nothing)
                        
'objvalue = Int(rdr.Item(p.Name.ToString).ToString)
                    Case "Decimal""Double"
                        mProperty.SetValue(Model, 
Decimal.ToDouble(rdr.Item(mProperty.Name.ToString)), Nothing)

                
End Select
            
End If
        
Next
        
Return Model
    
End Function

 

 

posted on 2008-12-23 14:01  笑看风云淡  阅读(662)  评论(0编辑  收藏  举报

导航