Die Listen machen es schwierig ... meine frühere Antwort (unten) gilt nur für Like-for-Like-Eigenschaften (nicht die Listen). Ich vermute, Sie haben könnten einfach und Code zu pflegen schreiben:
Student foo = new Student {
Id = 1,
Name = "a",
Courses = {
new Course { Key = 2},
new Course { Key = 3},
}
};
StudentDTO dto = new StudentDTO {
Id = foo.Id,
Name = foo.Name,
};
foreach (var course in foo.Courses) {
dto.Courses.Add(new CourseDTO {
Key = course.Key
});
}
bearbeiten; gilt nur für flach Kopien - keine Listen
Reflexion ist eine Option, aber langsam. In 3.5 können Sie dies in ein kompiliertes Bit des Codes mit Expression
einbauen. Jon Skeet hat eine vorgewalzte Probe dieses in MiscUtil - nur verwenden, wie:
Student source = ...
StudentDTO item = PropertyCopy<StudentDTO>.CopyFrom(student);
Da diese verwendet eine kompilierte Expression
es wird in beträchtlichem Ausmaß aus-führen Reflexion.
Wenn Sie nicht über 3,5 verfügen, verwenden Sie reflection oder ComponentModel. Wenn Sie Componentmodel verwenden, können Sie zumindest HyperDescriptor
verwenden es fast so schnell zu bekommen, wie Expression
Student source = ...
StudentDTO item = new StudentDTO();
PropertyDescriptorCollection
sourceProps = TypeDescriptor.GetProperties(student),
destProps = TypeDescriptor.GetProperties(item),
foreach(PropertyDescriptor prop in sourceProps) {
PropertyDescriptor destProp = destProps[prop.Name];
if(destProp != null) destProp.SetValue(item, prop.GetValue(student));
}
Werfen Sie einen Blick auf [Automapper] (http://automapper.org/). Dieses Tool wurde entwickelt, um dieses genaue Szenario zu behandeln. – Steven