我使用以下代码使用源对象创建特定目标类型的新实例,其中我将所有基本类型属性值从源对象复制到目标对象:
Function GetDestinationObjectFromSourceObject(pSourceObject As Object, pDestinationType As Type) As Object
Dim oDestinationObject = Activator.CreateInstance(pDestinationType)
For Each oPropertyDescriptor As PropertyDescriptor In TypeDescriptor.GetProperties(pSourceObject)
If TypeDescriptor.GetProperties(oDestinationObject).Contains(oPropertyDescriptor) Then
TypeDescriptor.GetProperties(oDestinationObject).Item(oPropertyDescriptor.Name).SetValue(oDestinationObject, oPropertyDescriptor.GetValue(pSourceObject))
End If
Next
Return oDestinationObject
End Function
现在。我有一个List(Of Class1)并希望使用相同的通用方法获得List(Of Class2)。 这里我想传递List(Of Class1)和目标类型(即GetType(Class2)) 我怎样才能实现同样的目标?
答案 0 :(得分:0)
如果我正确理解你的问题,那么你可以迭代List(Class1)并将每个对象传递给这个方法并添加返回到一个新的List(Class2)的对象。
例如(我在c#中放入代码,因为我在vb.net中有点弱,但将其转换为vb.net对你来说应该不是问题)
如果这不是您的要求,请重新提出您的问题。
List<Class2> newlstClass2 = new List<Class2>();
foreach(Class1 item in lstClass1)
{
newlstClass2.Add(GetDestinationObjectFromSourceObject(item, typeof(Class2)));
}
编辑:
以下是符合您要求的通用方法。我假设这些类有一个无参数构造函数。我已经测试了一下我的结果。请在最后进行彻底的测试。
public List<U> GenerateList<T, U>(List<T> lst)
{
List<U> newLst = new List<U>();
foreach (var item in lst)
{
U obj = Activator.CreateInstance<U>();
foreach (PropertyInfo item2 in item.GetType().GetProperties())
{
if (obj.GetType().GetProperty(item2.Name) != null)
{
obj.GetType().GetProperty(item2.Name).SetValue(obj, item2.GetValue(item, null), null);
}
}
newLst.Add(obj);
}
return newLst;
}
希望这有帮助。