将一个对象复制到另一个对象 [英] copy one object to another

查看:218
本文介绍了将一个对象复制到另一个对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

.net 3.5,VS 2010 ...这是一个asp.net网站。

.net 3.5, VS 2010... this is for an asp.net website.

我有一个名为Agency的类。有一个称为Agency_Queries的第二个类。 Agency_Queries继承了Agency类。我试图创建一个函数,将代理中的相似属性复制到Agency_Queries。我想出了如何做到这一点..但是当我试图使它更通用,所以我可以传入我的类名和列表我做错了。

I have an class called Agency. there is a second class called Agency_Queries. Agency_Queries inhertis the Agency class. I'm trying to create a function that will copy the like properties in Agency to Agency_Queries. I figured out how to do that.. but when i try to make it more generic so that i can pass in my class name and lists i'm doing something wrong.

因此,如果有一个(代理机构)列表需要复制到列表(Agency_Queries),我有以下类似的东西。

So if there is an list(of Agency) that needs to be copied to list(of Agency_Queries) i've got something like the following.

  Dim AgencyS As List(Of Agency) = Nothing
    Dim Oc As New Agency_Controller
    AgencyS = Oc.GetAgencyData(0)

    Dim AgencyQueriesS As New List(Of Agency_Queries)
    Dim _itemProperties() As Reflection.PropertyInfo = AgencyS.Item(0).GetType.GetProperties()
    For Each item In AgencyS
        Dim X As NewAgency_Queries
        _itemProperties = item.GetType().GetProperties()
        For Each p As Reflection.PropertyInfo In _itemProperties
            For Each s As Reflection.PropertyInfo In X.GetType().GetProperties()
                If p.Name = s.Name Then
                    s.SetValue(X, p.GetValue(item, Nothing), Nothing)
                End If
            Next
        Next
        AgencyQueriesS.Add(X)
    Next

问题是当我去做通用的Dim X为新的Agency_Queries。如何在一般意义上创建类的新实例。我需要它是一个新的实例或每次它被添加到AgencyQueriesS列表中所有的对象都有相同的数据值。

the problem is when i go to make this generic by the Dim X as new Agency_Queries. How do i go about creating a new instance of the class in a generic sense. I need to have it be a new instance or each time it gets added to teh AgencyQueriesS list all the objects have the same data values.

这里是通用版本.. 。不工作

Here is the generic version... not working

 Shared Function CopyObject(ByVal inputList As Object, ByVal OutputClass As Object, ByVal outputList As Object) As Object
        Dim _itemProperties() As Reflection.PropertyInfo = inputList.Item(0).GetType.GetProperties()
        For Each item In inputList
            Dim oClean As Object = OutputClass
            For Each p As Reflection.PropertyInfo In _itemProperties
                For Each s As Reflection.PropertyInfo In oClean.GetType().GetProperties()
                    If p.Name = s.Name Then
                        s.SetValue(oClean, p.GetValue(item, Nothing), Nothing)
                    End If
                Next
            Next
            outputList.Add(oClean)
        Next
        Return outputList
    End Function

谢谢
shannon

thanks shannon

推荐答案

我花了一点时间想出了这一点:

I took a little of this and that and came up with this:

    Imports System.Reflection

Public Class ObjectHelper

    ' Creates a copy of an object
    Public Shared Function GetCopy(Of SourceType As {Class, New})(ByVal Source As SourceType) As SourceType

        Dim ReturnValue As New SourceType
        Dim sourceProperties() As PropertyInfo = Source.GetType().GetProperties()

        For Each sourceProp As PropertyInfo In sourceProperties
            sourceProp.SetValue(ReturnValue, sourceProp.GetValue(Source, Nothing), Nothing)
        Next
        Return ReturnValue
    End Function
End Class

这篇关于将一个对象复制到另一个对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆