L’extension method che voglio postare questa volta consente di copiare le proprietà (almeno in lettura) di un oggetto sorgente, nelle proprietà (dello stesso tipo, con lo stesso nome e, almeno, in scrittura) di un altro oggetto:
<Extension()> _
Public Sub CopyFrom(ByVal destObj As Object, _
ByVal sourceObj As Object)
Dim sourceType = sourceObj.GetType()
Dim destType = destObj.GetType()
Dim sourceProperties = (From p In sourceType.GetProperties() _
Where p.CanRead _
Select p).ToList()
For Each sourceProp In sourceProperties
Dim propName = sourceProp.Name
Dim destProp = destType.GetProperty(propName)
If destProp IsNot Nothing AndAlso destProp.CanWrite Then
If sourceProp.GetType().Equals(destProp.GetType()) Then
Dim propValue = sourceProp.GetValue(sourceObj, Nothing)
Try
destProp.SetValue(destObj, propValue, Nothing)
Catch ex As Exception
End Try
End If
End If
Next
End Sub
Utilizzando questo moetodo possiamo scrivere:
.
.
Dim destObj as Object
destObj.CopyFrom(sourceObj)
.
.
in modo da copiare tutte le proprietà di sourceObj nelle proprietà comuni di destObj.
Commenti